繁体   English   中英

bash中的括号 - 子shell与分组

[英]Parenthesis in bash - subshell vs grouping

在bash的联机帮助页面中,在“ 复合命令 ”部分下,有以下两个条目:

(list)列表在子shell环境中执行(参见下面的COMMAND EXECUTION ENVIRONMENT)。 影响shell环境的变量赋值和内置命令在命令完成后不会保持有效。 返回状态是列表的退出状态。

并且在test[[

(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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM