在使用Bash shell扩展的反引号中是否可变?

时间:2017-03-26 05:26:58

标签: bash shell backticks

如果我在反引号中有变量,它是在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

1 个答案:

答案 0 :(得分:3)

(你应该使用$(...)代替反叛。但原则是一样的。)

要在子shell中执行的命令由命令替换形式中的文字字符组成,除了反引号内的反斜杠周围的特殊且有时令人困惑的规则。所以变量扩展发生在子shell中。

例如,

x=$(foo=bar && echo $foo)

将定义x=bar,但不会导致在外壳中定义(重新)foo