因为我的last question过度简化,所以我误解了我的问题。
以下是问题的更好表示:
#!/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,但不能编辑回声。
答案 0 :(得分:0)
如果你可以使用数组,你可以定义 REALTEST 变量如下。
REALTEST=('TESTVAR="some spaced string"' 'TESTVAR2="some other spaced string"')
然后实际命令看起来像
env -i "${REALTEST[@]}" /bin/bash -l -c "echo \$TESTVAR"
我可以编辑REALTEST,但不能编辑回声。
如果你不想在 $ 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"