[译]bash grouping commands

翻译自 GNU 手册,原文在这里

Bash 提供了两种方式使一组命令(a list of commands)做为一个单元执行。当命令被
组成一组时,可以对一组进行重定向。例如,组内的所有命令的所有输出可以被重定
向到一个流里。

()

( list )
将一组命令放在小括号里会创建一个子 shell (subshell),组里的所有命令在都会
在里面执行。因为是在子 shell 里执行,所以在里面执行时给变量赋的值都会在子
shell 结束时消失。

{}

{ list; }
将一组命令放在大括号里会使得它们在当前 shell 执行,不会创建子 shell。最后
的分号(或换行)不能省略。

除了是否会创建子 shell 外,这两个结构之间因为历史原因还有一些细微的不同。因
为大括号是保留字(reserved words),所以它们必须和命令或其他元字符
(metacharacters)用空格隔开。而小括号是运算符(operators),所以即使不用空白符
和命令隔开也能被识别。

两个结构的退出状态都是命令组的退出状态。

0%