什么时候使用 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.

中被(重新)定义