[英]Parenthesis in bash - subshell vs grouping
在bash的联机帮助页面中,在“ 复合命令 ”部分下,有以下两个条目:
(list)列表在子shell环境中执行(参见下面的COMMAND EXECUTION ENVIRONMENT)。 影响shell环境的变量赋值和内置命令在命令完成后不会保持有效。 返回状态是列表的退出状态。
(expression)返回表达式的值。 这可以用于覆盖运算符的正常优先级。
我能看到的唯一区别是,在一个中,括号旁边没有空格,而另一个则是。 这实际上区分了分组与子shell,还是依赖于上下文?
换句话说,如果我跑
if ! [ 2 -eq 2 ] || ( [ 2 -eq 2 ] && [ 4 -eq 4 ] ); then echo "hello"; fi
这只是分组条件还是在子shell中运行?
这些条目的上下文是相关的。
后者在[[
构造并记录该构造在其参数上的行为的文档]的文档中。
前者正在讨论顶级shell复合命令构造(如[[
construct本身])并引入了一个子shell。
这在手册页的后面的test
/ [
命令的描述中再次出现(但基本上与[[
讨论]相同)。
要在当前shell中进行分组,可以使用花括号:
if ! [ 2 -eq 2 ] || { [ 2 -eq 2 ] && [ 4 -eq 4 ]; }; then
...
fi
(注意括号内侧和额外分号周围的空格,这两者都是必要的。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.