![无法在新 shell 中导出或设置变量](https://linux22.com/image/1385202/%E6%97%A0%E6%B3%95%E5%9C%A8%E6%96%B0%20shell%20%E4%B8%AD%E5%AF%BC%E5%87%BA%E6%88%96%E8%AE%BE%E7%BD%AE%E5%8F%98%E9%87%8F.png)
我在处理一个问题时遇到了一些奇怪的事情。这个命令似乎不起作用。(使用 ` 填充空白行)。
使用导出时
> /bin/bash -c "echo $FOO; export FOO=BAR; echo $FOO"
`
`
但该命令按预期工作。
> echo $FOO; FOO=BAR; export FOO=BAR; echo $FOO
`
BAR
使用 = 设置时出现同样的问题
> /bin/bash -c "echo $FOO; FOO=BAR; echo $FOO"
`
`
但该命令却按预期发挥作用。
> echo $FOO; FOO=BAR; FOO=BAR; echo $FOO
`
BAR
知道发生什么事了吗?
答案1
这是双引号的问题。您的 shell(‘外部’ shell)将$FOO
在运行命令之前展开。如果您设置了$FOO
某个值(比如说“FOO”),您实际上会运行此命令。
/bin/bash -c "echo FOO; export FOO=BAR; echo FOO"
如果你没有设置 FOO,则运行此命令
/bin/bash -c "echo ; export FOO=BAR; echo "
请使用单引号来获得您所期望的结果。
/bin/bash -c 'echo $FOO; FOO=BAR; echo $FOO'