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

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

4

2 回答 2

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 原因请参阅评论。

于 2013-03-08T17:33:07.710 回答
1

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

如果你想让它工作,你必须FOO为封闭的shell设置变量并将echo ...单引号括起来

sudo FOO=bar sh -c 'echo Result:${FOO}'
于 2013-03-08T19:11:55.213 回答