我尽可能地简化了这个场景。我试图让第二个版本使用适当的转义引号。第一个按预期工作。不幸的是,我无法改变第二个被调用的方式。但是,我可以更改REALTEST的值。无论我尝试引用什么,我都不能让第二个接受间隔的字符串。
这就是我想要做的事情:
#!/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"
这是我的输出:
-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
关于我可以采取什么方法来解决这个问题的想法,或者这是不可能的?
答案 0 :(得分:0)
env -i "$REALTEST" /bin/bash -l -c "echo \$TESTVAR"
您需要对变量进行双引号,否则bash会将其拆分。
答案 1 :(得分:0)
双引号插值,而单引号不插入。
这是什么意思?一个接一个地运行以下三行并亲自看看:
life='meaning'; echo $life
life='meaning'; echo '$life'
life='meaning'; echo "$life"
有些人会引用一切,只是为了确定。我是其中一个不喜欢这样做的人。对非插值字符串使用单引号,对。使用双精度。