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

Ela*_*iss 7 bash

我想在条件之后对一些 bash 指令进行分组:

第一次尝试:

$ [[ 0 == 1 ]] && echo 1; echo 2
2
Run Code Online (Sandbox Code Playgroud)

第二次尝试:

$ [[ 0 == 1 ]] && (echo 1; echo 2)
$ [[ 0 == 0 ]] && (echo 1; echo 2)
1
2
Run Code Online (Sandbox Code Playgroud)

所以后者是我想要的。

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

cam*_*ski 6

将命令放入() 创建一个子shell,在其中执行分组的命令。这意味着在 subshel​​l 中对变量所做的任何更改,都保留在 subshel​​l 中,例如

$ n=5; [[ "$n" == "5" ]] && ( ((n++)); echo $n); echo $n
6
5
Run Code Online (Sandbox Code Playgroud)

相反,您希望与{}哪个不调用子shell分组。然后输出将是

$ n=5; [[ "$n" == "5" ]] && { ((n++)); echo $n; }; echo $n
6
6
Run Code Online (Sandbox Code Playgroud)

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