我想在一个条件之后组织一些bash指令:
首次尝试:
$ [[ 0 == 1 ]] && echo 1; echo 2
2
第二次尝试:
$ [[ 0 == 1 ]] && (echo 1; echo 2)
$ [[ 0 == 0 ]] && (echo 1; echo 2)
1
2
所以后者就是我想要的。
问题:这是我第一次在bash中使用(
... )
语法。 (
... )
是正确的方法,还是会产生一些我可能会遗漏的副作用?
答案 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; };
。