Chr*_*ton 5 bash grouping subshell
在bash的联机帮助页面中,在" 复合命令 "部分下,有以下两个条目:
(list)列表在子shell环境中执行(参见下面的COMMAND EXECUTION ENVIRONMENT).影响shell环境的变量赋值和内置命令在命令完成后不会保持有效.返回状态是列表的退出状态.
(expression)返回表达式的值.这可以用于覆盖运算符的正常优先级.
我能看到的唯一区别是,在一个中,括号旁边没有空格,而另一个则是.这实际上区分了分组与子shell,还是依赖于上下文?
换句话说,如果我跑
if ! [ 2 -eq 2 ] || ( [ 2 -eq 2 ] && [ 4 -eq 4 ] ); then echo "hello"; fi
Run Code Online (Sandbox Code Playgroud)
这只是分组条件还是在子shell中运行?
这些条目的上下文是相关的。
后者位于该[[构造的文档中,并记录该构造在其参数上的行为。
前者正在讨论顶级 shell 复合命令构造(如构造[[本身)并引入子 shell。
test这在手册页后面的/命令的描述中再次出现[(但这本质上与讨论相同[[)。
要在当前 shell 中进行分组,可以使用花括号:
if ! [ 2 -eq 2 ] || { [ 2 -eq 2 ] && [ 4 -eq 4 ]; }; then
...
fi
Run Code Online (Sandbox Code Playgroud)
(请注意大括号内部的空格和额外的分号,这两者都是必需的。)