什么时候使用 Bash shell 扩展反引号中的变量?
When is variable in backticks expanded using Bash shell?
如果我在反引号中有一个变量,它是在 shell 还是在子 shell 中展开的?例如:
FOO=BAR
BAZ=`[[ $FOO == BAR ]] && echo 1 || echo 0`
是在展开$FOO
时定义的吗?例如 subshell 是否看到这个:
[[ $FOO == BAR ]] && echo 1 || echo 0
或者这个:
[[ BAR == BAR ]] && echo 1 || echo 0
(你真的应该使用$(...)
而不是反引号。但是原理是一样的。)
要在子shell 中执行的命令由命令替换形式内的文字字符组成,但反引号内的反斜杠周围的特殊且有时令人困惑的规则除外。所以变量扩展发生在 subshell.
内部
例如,
x=$(foo=bar && echo $foo)
将定义 x=bar
但不会导致 foo
在外部 shell.
中被(重新)定义
如果我在反引号中有一个变量,它是在 shell 还是在子 shell 中展开的?例如:
FOO=BAR
BAZ=`[[ $FOO == BAR ]] && echo 1 || echo 0`
是在展开$FOO
时定义的吗?例如 subshell 是否看到这个:
[[ $FOO == BAR ]] && echo 1 || echo 0
或者这个:
[[ BAR == BAR ]] && echo 1 || echo 0
(你真的应该使用$(...)
而不是反引号。但是原理是一样的。)
要在子shell 中执行的命令由命令替换形式内的文字字符组成,但反引号内的反斜杠周围的特殊且有时令人困惑的规则除外。所以变量扩展发生在 subshell.
内部例如,
x=$(foo=bar && echo $foo)
将定义 x=bar
但不会导致 foo
在外部 shell.