2009-12-02 5 views
2

pax 명령에 디렉토리 이름을 삽입하려고하는 스크립트를 작성 중이며 올바른 구문을 얻는 방법을 모르겠습니다. 이것은 내가 뭘 하려는지,하지만 정규식 문자열의 일부로 $ DIRNAME 치료 것으로 보인다.스크립트 변수를 정규식 문자열에 삽입하려면 어떻게해야합니까?

DIRNAME=$(tar -tvf $1 | head -1 | sed -e 's:^.* \([^/]*\)/.*$:\1:') 
pax -r -f $1 -s'/$DIRNAME\/upload\///' 

고마워요!

답변

4

인원 호출 할 때 이중 인용 부호를 사용해보십시오 : 단일하지 $ 변수는 그들 만이 따옴표 문자열에서 발생할 때 확장 얻을, (예를 들어, sh와 bash) 여러 쉘에서

DIRNAME=$(tar -tvf $1 | head -1 | sed -e 's:^.* \([^/]*\)/.*$:\1:') 
pax -r -f $1 -s"/$DIRNAME\/upload\///" 

을 따옴표 붙은 문자열. 일예로


, 다음 스크립트 :

Single quotes around regexp: 
hello world 
Double quotes around regexp: 
hi world 
+0

작동하지 않습니다

#!/bin/sh DIRNAME=$(echo 'hello') echo "Single quotes around regexp:" echo 'hello world' | sed 's/$DIRNAME/hi/' echo "Double quotes around regexp:" echo 'hello world' | sed "s/$DIRNAME/hi/" 

출력을 생성합니다. 문제는 $ DIRNAME이 DIRNAME의 내용을 표시하지 않고 텍스트 문자열 $ DIRNAME 자체를 정규식 문자열에 삽입한다는 것입니다. – user77413

+0

스크립트가 실행되는 셸은 무엇입니까? 세게 때리다? tcsh? –

+0

죄송합니다. 다시 시도해 보았습니다. 오류가 발생하면 pax 명령을 사용했지만 $ DIRNAME은 이중 인용 부호를 사용하지 않았습니다. 나는 bash를 사용하고있다. – user77413

관련 문제