如何将封装变量传递到新环境中

时间:2017-03-01 22:25:27

标签: bash

我尽可能地简化了这个场景。我试图让第二个版本使用适当的转义引号。第一个按预期工作。不幸的是,我无法改变第二个被调用的方式。但是,我可以更改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

关于我可以采取什么方法来解决这个问题的想法,或者这是不可能的?

2 个答案:

答案 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"
  • 第一个将回应:意思
  • 第二个回应:$ life
  • 第三个将回应:意思

有些人会引用一切,只是为了确定。我是其中一个不喜欢这样做的人。对非插值字符串使用单引号,对。使用双精度。