执行 group by {} 与 () 中的命令集

执行 group by {} 与 () 中的命令集

我读了这篇文章:

我理解答案,但可以选择通过 或 执行一组命令{}()创建这篇文章。

如果存在场景:何时强制使用{}-()反之亦然 - 以及为什么?

答案1

两者的区别在于()创建一个子shell。例如,您可以尝试以下操作:

cd $HOME ; ls

这些命令的输出将列出当前用户拥有的文件和目录。

现在,使用 subshel​​l,您可以尝试以下操作:

( cd / ; ls ; ) ; ls

我们在这里所做的是创建一个子shell(cd / ; ls)将当前目录更改为/然后列出其文件和目录。之后,一旦子 shell 结束,我们就会列出当前目录的文件,但这不是/目录,在这种情况下,当前目录是用户主文件夹($HOME

现在,如果你改变()行为{}将会有所不同。

{ cd / ; ls ; } ; ls

在这里,输出将列出/两个ls命令的目录中的文件和目录。

让我们看另一个例子:

( echo Subshell is $BASH_SUBSHELL ; ) ; echo Subshell is $BASH_SUBSHELL

这些命令将分别回显:

Subshell is 1
Subshell is 0

正如您所看到的,使用环境变量$BASH_SUBSHELL您可以获得当前的子shell级别,因此,当您使用()更改时BASH_SUBSHELL(您可以根据需要使用嵌套子shell)。

还有另一个例子:

( vartmp=10 ; echo var is $vartmp ; ) ; echo var is $vartmp

在这种情况下,输出将是:

var is 10
var is

正如你所看到的,第二行$vartmp是空的。这是正确的,因为当子 shell 执行结束时,所有变量、函数和一些更改(例如修改环境变量)都将被清除。因此,当您想要显示$vartmp子 shell 结束后的内容时,输出将为空,因为变量不存在。

您可以尝试更改()这些{}命令中的 to 以检查不同的行为。

相关内容