2013-04-08 1 views
0

내 스크립트에서 아래 부분을 사용하여 파일의 변수를 대체합니다.

그러나 스크립트의이 부분을 실행 한 후 "&"기호는 스크립트에서 무시됩니다. 이 행동에 대한 이유가 있습니까?

while read line 
    do 
    eval echo "$line" >> output.txt 
    done < "input" 

내 입력 파일 내 출력

XXX.6.ID=LCPR_PROJ 
XXX.6.VALUE=132 
XXX.6.CTID=58 
XXX.6.ECID=1032 
XXX.6.SEC= 

은 내 명령에 뭔가를 변경해야합니까 아래처럼 보이는 명령을 실행 한 후

XXX.6.ID=LCPR_PROJ& 
XXX.6.VALUE=$PMS& 
XXX.6.CTID=58& 
XXX.6.ECID=1032& 
XXX.6.SEC= 

아래처럼 보인다?

답변

4

eval을 사용하고 싶지 않습니다!

eval은 표현을 별도로 평가하고 & 문자를 해석합니다.

& 문자는 bash에게 서브 쉘에서 명령을 실행하도록 지시합니다. Bash man page에서 : 명령이 제어 연산자 & 종료되면

, 쉘 서브 쉘 백그라운드에서 명령을 실행한다.

는 스크립트

while read line 
    do 
    echo "$line" >> output.txt 
    done < "input" 

에서 그것을 제거하고 예상대로 작동합니다. 당신이이 eval을 통해 모든 라인을 실행하려면, 당신은 당신이 무슨 일을하는지 알고 경우

, 당신은 수동으로 &의를 감지하고 탈출해야합니다 :

while read line; do 
    line=${line/&/\\&} 
    eval echo "$line"; 
done 

bash's string manipulation를 사용하여.

+0

+1 나는 op의 게시물에서 평가를 보지 못했습니다! : D – Kent

+0

정보 주셔서 감사합니다 – user2190101

관련 문제