$ sudo sh -c "FOO=bar echo Result:${FOO}"
Result:
为什么FOO中存储的值不显示?
答案 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}'