在bash中封装变量字符串

时间:2017-03-02 13:37:38

标签: bash

因为我的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,但不能编辑回声。

1 个答案:

答案 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"