在 bash 的手册页中,在“复合命令”部分下,有以下两个条目:
(list) list 在子shell 环境中执行(参见下面的命令执行环境)。影响 shell 环境的变量分配和内置命令在命令完成后不会保持有效。返回状态是列表的退出状态。
( 表达式 ) 返回表达式的值。这可用于覆盖运算符的正常优先级。
我能看到的唯一区别是,在一个中,括号旁边没有空格,而在另一个中,它们有。这是真正区分分组与子外壳的原因,还是取决于上下文?
换句话说,如果我跑
if ! [ 2 -eq 2 ] || ( [ 2 -eq 2 ] && [ 4 -eq 4 ] ); then echo "hello"; fi
这只是对条件进行分组还是在子shell中运行?