我在bash中发现了一些奇怪的东西。 假设我有一个包含以下内容的文件:
#!/bin/bash
export foo=2
如果我运行source toto; echo foo=$foo
,我会按预期运行
富= 2
但是,如果我运行bash -c "source toto; echo foo=$foo"
,我会
富=
如果我跑
也一样bash << EOF
source toto
echo foo=$foo
EOF
仍然,如果我创建一个包含以下内容的文件test.sh
#!/bin/bash
echo foo=$foo
然后我运行bash -c "source toto; ./test.sh"
然后我终于得到了预期的
富= 2
有人了解这些结果吗? 谢谢!
答案 0 :(得分:6)
运行时
bash -c "source toto; echo foo=$foo"
您键入的shell会扩展字符串中的所有变量。那时,$foo
还没有价值,所以就像你写的一样
bash -c "source toto; echo foo="
如果使用单引号而不是双引号,则不会展开变量。然后将文字命令行发送到bash
,它将展开$foo
本身。
bash -c 'source toto; echo foo=$foo'