在bash中执行命令分组的正确方法是什么

时间:2017-09-07 09:38:36

标签: bash

我想在一个条件之后组织一些bash指令:

首次尝试:

$ [[ 0 == 1 ]] && echo 1; echo 2
2

第二次尝试:

$ [[ 0 == 1 ]] && (echo 1; echo 2)
$ [[ 0 == 0 ]] && (echo 1; echo 2)
1
2

所以后者就是我想要的。

问题:这是我第一次在bash中使用( ... )语法。 ( ... )是正确的方法,还是会产生一些我可能会遗漏的副作用?

1 个答案:

答案 0 :(得分:4)

() 中放置命令可创建子shell ,其中执行分组命令。这意味着对子shell中所做变量的任何更改都会保留在子shell中,例如

$ n=5; [[ "$n" == "5" ]] && ( ((n++)); echo $n); echo $n
6
5

相反,您希望与{}分组,但不会调用子shell。那么输出就是

$ n=5; [[ "$n" == "5" ]] && { ((n++)); echo $n; }; echo $n
6
6

还要注意{}和分号内部的空格:{ ((n++)); echo $n; };

相关问题