bash 命令替换的变量评估

bash variable evaluation on command substitution

下面是一段bash代码

2 bar=false
3 foo=$(echo $bar);
4 echo $foo
5
6 echo change bar from false to true
7
8 bar=true
9 echo $foo

下面是输出

false
change a from false to true
false

我期待第 9 行 echo 命令会重新执行命令替换并输出 true。然而事实并非如此。第二个 $foo 将直接引用 "foo" 值,即文字 "false",而不是再次执行命令。嗯,这样设计也是合理的。我猜对了吗?有没有关于这种行为的幕后机制

foo=$(echo $bar); 是一个赋值,而不是当您稍后更改 bar 的值时重新计算的函数。

foo 只是在这里用命令替换的输出设置,值为 false.