有人可以解释一下下面的说法吗?
$x=50
$ (x=100) #这里代码仅在子shell中执行。当 subshellexecution 完成时,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
正如您所说:( )
导致子外壳。{ ;}
没有。这就是结果不同的原因。{ ;}
无论如何,对于单个命令来说没有意义。这是一个分组功能。