2013-03-29 7 views
1

다음은 csh 스크립트입니다.csh 스크립트에서 perl을 호출 할 때 변수를 확장하는 방법은 무엇입니까?

#! /bin/csh 
set alpha=10\20\30; 
set beta = $alpha.alpha; 
perl -p -i.bak -e 's/gamma/'$beta'/' tmp; 

tmp 파일은 단어 gamma가 포함되어 있습니다. tmp.csh을 실행 한 후에는 tmp에 10\20\30.alpha이 올 것으로 예상되지만 지금은 102030.alpha입니다.

이 상황에서 슬래시를 유지하는 방법은 무엇입니까?

참고 : 알파 변수의 정의를 변경하는 것을 선호하지 않습니다. 스크립트에서이 형식 (10 \ 20 \ 30) 만 사용해야하는 경우에 사용됩니다.

감사합니다.

답변

2

csh에서 알파 할당의 경우 백 슬래시는 '리터럴 2 또는 3'을 의미합니다. csh가이 작업을 수행하지 못하게하려면 할당을 따옴표로 묶어야합니다.

#! /bin/csh 
set alpha="10\20\30"; 
set beta = $alpha.alpha; 
perl -p -i.bak -e 's/gamma/'$beta'/' tmp; 

의심 스럽다면 변수가 정확히 무엇인지보기 위해 변수를 반향시키는 것이 도움이됩니다. 'alpha'변수가 원래 할당 한 방식대로 10 \ 20 \ 30과 같지 않으므로 마지막 메모를 이해할 수 없습니다.

+0

안녕하세요,이 작동하지만 '알파'에 슬래시를 넣으면 어떻게 될까요? 그러면 또 다른 오류가 발생합니다. – user13107

+0

'\ 2'또는 '\ 3'의 제어 문자 또는 '\'다음에 '2'또는 '3'의 시퀀스를 사용 하시겠습니까? 전자의 경우에는 알파의 백 슬래시를 이스케이프 처리 (역 슬래시)해야합니다. 'set alpha = "10 \\ 20 \\ 30";' –

+0

슬래시 케이스 대신 다른 대안을 찾았습니다. 's/gamma /'$ beta '/'대신 '@ gamma @'$ beta '@'를 사용합니다. 이렇게하면 대체 연산자 구분 기호와 $ beta의 슬래시를 혼동하지 않습니다. 어쨌든 당신의 도움에 감사드립니다. – user13107

관련 문제