当我设置它时,为什么这个bash变量为空?

时间:2013-03-08 17:31:43

标签: bash

$ sudo sh -c "FOO=bar echo Result:${FOO}"
Result:

为什么FOO中存储的值不显示?

2 个答案:

答案 0 :(得分:4)

因为bash会在调用${FOO}之前替换sudo。那么sh -c实际看到的是:

FOO=bar echo Result:

此外,即使你试过

FOO=bar echo Result:${FOO}

它仍然不起作用 1 。为了做到这一点,你可以这样做:

FOO=bar; echo Result:${FOO}

现在已经修复了,让我们回到sh -c。要阻止bash解释您提供给sh -c的字符串,只需将其放在'而不是"中:

sudo sh -c 'FOO=bar; echo Result:${FOO}'

1 请参阅评论。

答案 1 :(得分:1)

这不起作用,因为变量FOO是为以下命令echo设置的,但${FOO}被封闭的shell替换。

如果您希望它起作用,您必须为封闭的shell设置变量FOO并将echo ...包装在单引号中

sudo FOO=bar sh -c 'echo Result:${FOO}'