2016-10-31 2 views
1

이전 명령의 출력을 가져 와서 새 명령에 삽입하는 bash 스크립트에서 실행해야하는 명령이 있습니다.bash 스크립트에서 변수를 인용하는 방법

mycommand -p "$VARIABLE"

캐치 항상 즉, 내가 필요로하는 $ 및/특수 문자를 포함 할 $ 변수입니다 : VARIABLE=$(cat "file.txt" | grep "text")

그런 다음 다른 명령에서 그 변수를 사용 : 그래서 예를 들면

그래서 나는 특수 문자가 문자 그대로 취해 지도록 작은 따옴표를 사용해야한다.

나는 작동하지 않은 \""$VARIABLE"\"을 시도했습니다.

내가 성취하고자하는 것은 내 검색어가 포함 된 텍스트 파일에서 한 줄을 가져와 고유해야하며 한 줄만 입력하면됩니다.

그런 다음 해당 줄을 입력해야합니다 (그 중 절반은 줄을 자르고 나머지 절반은 다른 명령으로 사용). 이후에 변수를 반향하여 확인한 텍스트를 성공적으로 가져올 수 있습니다. 문제는 변수에 $와 \가 포함되어있어 특수 문자로 해석된다는 것입니다. 예를 들어

: 하나없이

my command -p $345$randomtext\.moretext

에서 오류가 발생합니다 그것을 해석하는 변수를 인용.

+0

휴대 전화를 사용해 보았습니다. 제대로 포맷되지 않았습니다. – jcalton88

+0

'printf "% s \ n"내 명령 -p "$ VARIABLE"이 특수 문자가 해석되고 있음을 보여 줍니까? – muru

+2

질문의 전제가 잘못되었습니다. 만약'VARIABLE'이'$ 345 $ randomtext \ .moretext'로 설정되어 있다면,'my command -p "$ VARIABLE"은 ('my command -p '$ 345 $ randomtext \ .moretext' * 내 명령 -p $ 345 $ randomtext \ .moretext '에 * 없습니다. 문제는 '내 명령'의 정의 안에 있어야합니다. – ruakh

답변

3

만약 당신이 여기 기록 된대로 (I 올바르게 왜곡 서식을 구문 분석하고있어 가정) 작동합니다 :

VARIABLE=`cat "file.txt" | grep "text"` 
mycommand -p "$VARIABLE" 

널 (null)이 아닌 다른 검색 결과에 특수 문자를 처리하는 문제가 (있을 경우 어떤 셸 변수에 저장 될 수 없다면), 호출되는 방식이 아닌 mycommand에서 잘못된 취급을하는 것이 거의 확실합니다.

$ cat file.txt 
There are some $special \characters\\\\ in this text file. 
This is another line of text. 
$text $VARIABLE $HOME etc. 
$ VARIABLE=`cat "file.txt" | grep "text"` 
$ printargs -p "$VARIABLE" 
Got 2 arguments: 
    '-p' 
    'There are some $special \\characters\\\\\\\\ in this text file.\nThis is another line of text.\n$text $VARIABLE $HOME etc.' 

printargs가 당신을 어떻게이기 때문에 (는 백 슬래시의 모든 배와 '\ n을'로 줄 바꿈을 인쇄주의 인자의 파이썬 표현을 출력하는 간단한 파이썬 프로그램입니다 예를 들면 다음과 같습니다이다 ') 파이썬 문자열을 쓰기 D :

#!/usr/bin/python 

import sys 

print "Got", len(sys.argv)-1, "arguments:" 
for arg in sys.argv[1:]: 
    print " " + repr(arg) 

을 BTW, 나는 문체 몇 가지 제안이 있습니다 특별한 의미가 환경 변수와 충돌 (피하기 위해 쉘 변수에 대한 소문자 이름을 사용하는 예 $PATH에 할당하는 것은 이어질 것 문제가 생기는 경우). 또한 cat file | grep patternuseless use of cat입니다. grep pattern file을 사용하십시오.

+0

mycommand에있을 수 있습니다. (내 명령이 아니더라도 다른 프로그램의 명령에 내장되어 있음). 후속 명령을 수동으로'mycommand -p '$ 345 $ randomtext \ .moretext'로 실행하면 성공적으로 실행됩니다. 필자는 그 경우에 mycommand가 아니라 해석을 껍질을 벗기는 쉘이라고 생각했습니다. – jcalton88

+0

또한 변수 이름 지정에 동의하며이를 조정할 것입니다. 고양이 사용에 관해서는 필자가 스크립트를 작성한 이후로 오랜 시간이 걸렸으며 ps aux에서 실행중인 것이 있는지 확인할 때 grep 만 사용하고 항상 grep로 파이프합니다. 나는 습관이 넘겨 놨다는 것을 잊었거나 그런 식으로 grep을 사용할 수 있다는 것을 몰랐다. 감사! – jcalton88

+0

어제와 오늘 내가 다르게 한 것은 확실하지 않지만 변수를 큰 따옴표로 묶는 것만으로 효과가있었습니다. 어제도 똑같은 일을했지만 문제 해결 중에 다른 것을 바꿨을 것입니다. 어쩌면 어떻게 변수를 얻었 을까요? 어쨌든 이것은 올바른 내용이므로 답변으로 선택하겠습니다. – jcalton88

관련 문제