$ sudo sh -c "FOO=bar echo Result:${FOO}"
Result:
为什么不显示存储在 FOO 中的值?
因为 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 原因请参阅评论。
这不起作用,因为变量FOO
是为以下命令设置的echo
,但是${FOO}
被封闭的外壳替换。
如果你想让它工作,你必须FOO
为封闭的shell设置变量并将echo ...
单引号括起来
sudo FOO=bar sh -c 'echo Result:${FOO}'