此echo
调用输出变量:
$ FOO="bar" eval 'echo foo: "$FOO"'
foo: bar
但这不是:
$ FOO="bar" echo foo: "$FOO"
foo:
那是为什么?我很确定我的单引号和双引号正确。
在环境方面,我使用的是iTerm2的MacBook Pro,当前版本为bash
:
$ echo $BASH_VERSION
4.4.23(1)-release
答案 0 :(得分:-2)
之所以会这样,是因为在您的第二个示例中,$FOO
在展开该行之前被展开。
编辑:如果第二部分在单独的脚本中,则此方法有效:
$ cat foo.sh
echo foo: "$FOO"
$ FOO="bar" ./foo.sh
foo: bar
或者:
FOO="bar" bash -c 'echo $FOO'
使用单引号引起该命令意味着该命令不会首先被外壳扩展。