2017-03-02 1 views
2

그래서 last question에 단순화로 인해 문제가 잘못 설명되었습니다. 출력 여기bash에서 변수의 캡슐화 문자열

#!/bin/bash -x 

REALTEST+=" TESTVAR=\"some spaced string\"" 
REALTEST+=" TESTVAR2=\"some other spaced string\"" 

env -i $REALTEST /bin/bash -l -c "echo \$TESTVAR" 
env -i '$REALTEST' /bin/bash -l -c "echo \$TESTVAR" 
env -i "$REALTEST" /bin/bash -l -c "echo \$TESTVAR" 

됩니다 : 여기

문제의 더 나은 표현

-bash-4.2$ ./test1.sh 
+ REALTEST+=' TESTVAR="some spaced string"' 
+ REALTEST+=' TESTVAR2="some other spaced string"' 
+ env -i 'TESTVAR="some' spaced 'string"' 'TESTVAR2="some' other spaced 'string"' /bin/bash -l -c 'echo $TESTVAR' 
env: spaced: No such file or directory 
+ env -i '$REALTEST' /bin/bash -l -c 'echo $TESTVAR' 
env: $REALTEST: No such file or directory 
+ env -i ' TESTVAR="some spaced string" TESTVAR2="some other spaced string"' /bin/bash -l -c 'echo $TESTVAR' 

내가처럼 보이도록 REALTEST을 얻을 수있는 방법 어떤 생각 :

env -i TESTVAR="some spaced string" TESTVAR2="some other spaced string" /bin/bash -l -c 'echo $TESTVAR' 

REALTEST는 편집 할 수 있지만 echo는 편집 할 수 없습니다.

답변

0

배열을 사용할 수있는 경우 REALTEST 변수를 다음과 같이 정의 할 수 있습니다. 내가 에코를 REALTEST 편집 할 수는 없지만

env -i "${REALTEST[@]}" /bin/bash -l -c "echo \$TESTVAR" 

처럼

REALTEST=('TESTVAR="some spaced string"' 'TESTVAR2="some other spaced string"') 

실제 명령은 다음 보인다. 당신이 $ TESTVAR 전에 백 슬래시를 작성하지 않으려면

, 당신과 같이 손 전에 정의 할 수 있습니다. 결국

TESTVAR="\$TESTVAR" 

출력은 다음과 같습니다.

+ REALTEST=('TESTVAR="some spaced string"' 'TESTVAR2="some other spaced string"') 
+ TESTVAR='$TESTVAR' 
+ env -i 'TESTVAR="some spaced string"' 'TESTVAR2="some other spaced string"' /bin/bash -l -c 'echo $TESTVAR' 
"some spaced string" 
+0

Ah! 정말 고맙습니다! 나는 배열을 사용하는 것조차하지 않았다! – DrMilk