首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Bash条件句中圆括号和方括号的区别

Bash条件句中圆括号和方括号的区别
EN

Stack Overflow用户
提问于 2012-10-07 09:21:41
回答 2查看 28.8K关注 0票数 74

在学习了一些bash的基础上,我了解了使用if语句的四种方法:

  • 单括号-( ... )
  • 双括号- (( ... ))
  • 单方括号- ...
  • 双方括号-[ ... ]

bash中括号和方括号的区别是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-07 10:23:22

您列出的测试:

  • 单括号-( ... )正在创建subshell
  • Double括号- (( ... ))用于算术运算
  • 单方括号- ...是POSIX test
  • Double方括号的语法-[ ... ]是bash条件表达式(类似于test,但功能更强大)

的语法

不是详尽的,您可以使用布尔逻辑。

代码语言:javascript
复制
if command; then ...

也是如此,因为命令具有退出状态。在bash中,0true,> 0false

您可以看到如下的退出状态:

代码语言:javascript
复制
command
echo $?

请参见:

http://wiki.bash-hackers.org/syntax/basicgrammar

http://wiki.bash-hackers.org/syntax/arith_expr

http://mywiki.wooledge.org/BashGuide/TestsAndConditionals

票数 81
EN

Stack Overflow用户

发布于 2018-04-08 16:34:07

shell本身只运行命令并评估其退出代码。零退出代码表示成功;所有其他值表示失败。

代码语言:javascript
复制
if command; then
    : things to do if the exit code from command was 0
else
    : things to do if it was not 0
fi

while command; do
    : things to do if the exit code was 0
done

命令[ (也称为test)在条件句中非常常用,因为原始的Bourne shell缺少内置的操作符来检查字符串是否为空或文件是否存在。现代的sh内置了这个命令,并且许多shell都有一个扩展的和现代化的版本shell,但是这不能正确地移植到POSIX,因此应该避免使用可移植的脚本。This related question更详细地解释了两者之间的差异。

符号(( ... ))引入了算术上下文。同样,这不是原始的Bourne shell的一部分(它有一个专门的外部工具expr来处理这些事情),但现代的shell已经内置了这个。如果算术求值的结果不是0(或错误),则算术表达式的结果代码为0。

符号( command )创建一个子外壳,并在其中计算command。在某些情况下,这实际上是必要的和有用的,但如果您刚刚学习语法,则不太可能需要它。

..。事实上,在我见过的大多数脚本中,这是在条件句中使用的,这显然是不必要的。

另一个需要注意的反模式是

代码语言:javascript
复制
command
if [ $? = 0 ]; then
    : things
fi

您几乎不需要显式地检查$?,尤其是,将它与零进行比较是ifwhile在幕后专门为您做的事情。这应该被简单地重构为

代码语言:javascript
复制
if command; then
    : ...
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12765340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档