2017-03-01 1 views
0

가능한 한이 시나리오를 단순화했습니다. 나는 두 번째 버전을 적절한 이스케이프 된 따옴표로 작업하려고합니다. 첫 번째 예상대로 작동합니다. 불행히도 두 번째 호출 방법을 변경할 수 없습니다. 그러나 저는 REALTEST의 가치를 바꿀 수 있습니다. 따옴표로 무엇을 시도했는지에 상관없이 두 번째 문자열에 간격 띄우기 문자열을 사용할 수 없습니다.캡슐화 된 변수를 새 환경에 전달하는 방법

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

나는이 문제를 해결하기 위해 취할 수있는 방법에 대한 어떤 생각을 또는이 단지 플랫 아웃하지 : 여기

#!/bin/bash -x 
env -i TESTVAR="some spaced string" /bin/bash -l -c "echo \$TESTVAR" 

REALTEST=TESTVAR="some spaced string" 
env -i $REALTEST /bin/bash -l -c "echo \$TESTVAR" 

내 출력 :

은 내가 뭘하려고 오전입니다 가능한?

답변

0

큰 따옴표는 큰 따옴표를 삽입하는 반면 큰 따옴표는 삽입하지 않습니다.

이것은 무엇을 의미합니까? 자신을 위해 다음 세 줄을 하나씩 실행 참조 :

life='meaning'; echo $life 
life='meaning'; echo '$life' 
life='meaning'; echo "$life" 
  • 첫 번째는 메아리 :
  • 두 번째 의미 메아리 : $ 수명
  • 세 번째는 메아리 : 의미

어떤 사람들은 모든 것을 이중 인용합니다. 나는 그 일을 싫어하는 사람들 중 한 사람입니다. 보간되지 않은 문자열에는 작은 따옴표를 사용하고 이중에는 double을 사용하십시오.

+0

나는 내 질문을 단순화했다. 나는 여기에 새로운 것을 올렸다 : http://stackoverflow.com/questions/42557008/encapsulating-strings-of-variables-in-bash – DrMilk

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

변수를 큰 따옴표로 묶어야합니다. 그렇지 않으면 bash가이를 분리합니다.

관련 문제