如果我在反引号中有变量,它是在shell中还是在子shell中展开?例如:
FOO=BAR
BAZ=`[[ $FOO == BAR ]] && echo 1 || echo 0`
是否在$FOO
展开时定义了?例如,子shell可以看到:
[[ $FOO == BAR ]] && echo 1 || echo 0
或者这个:
[[ BAR == BAR ]] && echo 1 || echo 0
答案 0 :(得分:3)
(你应该使用$(...)
代替反叛。但原则是一样的。)
要在子shell中执行的命令由命令替换形式中的文字字符组成,除了反引号内的反斜杠周围的特殊且有时令人困惑的规则。所以变量扩展发生在子shell中。
例如,
x=$(foo=bar && echo $foo)
将定义x=bar
,但不会导致在外壳中定义(重新)foo
。