带括号和方括号的IF语句之间的Bash差异
在学习一些关于bash的知识时,我会看到四种使用if
语句的方法:
bash中的括号和方括号有什么区别。
您列出的测试:
test
的语法 test
但更强大) 并非详尽无遗,您可以使用布尔逻辑
if command; then ...
因为这些命令有退出状态。 在bash
, 0
为true
,> 0
为false
。
你可以看到这样的退出状态:
command
echo $?
参见:
http://wiki.bash-hackers.org/syntax/basicgrammar
http://wiki.bash-hackers.org/syntax/arith_expr
http://mywiki.wooledge.org/BashGuide/TestsAndConditionals
shell本身只运行该命令并评估其退出代码。 零退出代码表示成功; 所有其他值表示失败。
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
命令[
(aka test
)在条件中非常常用,因为原始的Bourne shell缺少内置操作符来检查字符串是否为空或文件存在。 现代shell有内置的这个命令,许多shell有一个扩展的和现代化的版本[[
,但是这不适用于POSIX sh
,因此应该避免使用可移植脚本。 这个相关的问题更详细地解释了两者之间的差异。
符号(( ... ))
引入了一个算术上下文。 再一次,这是不是原来的Bourne shell的一部分(它有一个专用的外部工具expr
用于这些东西),但现代的shell有内置的。如果算术表达式的结果代码为0不是0(或错误)。
符号( command )
创建一个子shell并在其中评估command
。 在某些情况下,这实际上是必要和有用的,但如果你只是在学习语法,你不太可能需要这个。
......事实上,在大多数我看到这在有条件的情况下使用的脚本中,显然没有必要。
另一个反模式是要注意的是
command
if [ $? = 0 ]; then
: things
fi
你应该几乎不需要检查$?
明确,尤其是,它与零进行比较的东西if
和while
专门为你做幕后。 这应该简单地重构
if command; then
: ...
链接地址: http://www.djcxy.com/p/17471.html
上一篇: Difference in Bash between IF statements with parenthesis and square brackets