(x=100) 和 { x=100; 之间的差异}?

(x=100) 和 { x=100; 之间的差异}?

有人可以解释一下下面的说法吗?

$x=50

$ (x=100) #这里代码仅在子shell中执行。当 subshel​​lexecution 完成时,x 值将返回到其原始值,即 50

$ 回显 $x

50 美元


$x=50

${x=100; #这里x值完全改变并影响x的当前shell值并将其从50更改为100

$ 回显 $x

100 美元


这些是如何发生的,有人可以解释一下吗?

答案1

男人狂欢:

(列表) list 在子 shell 环境中执行(请参阅下面的命令执行环境)。 影响 shell 环境的变量分配和内置命令在命令完成后不再有效。

在单独的环境中调用的命令不能影响 shell 的执行环境。

{ 列表; }list 只是在当前 shell 环境中执行。

答案2

在类似 Bourne 的 shell 中,( ... )在子 shell 中执行代码,因此变量中的任何更改都是该子 shell 的本地更改,并且在父 shell 中不可见。相反,{ ... }在当前 shell 中执行代码,从而影响其变量。

答案3

正如您所说:( )导致子外壳。{ ;}没有。这就是结果不同的原因。{ ;}无论如何,对于单个命令来说没有意义。这是一个分组功能。

相关内容