在学习一些有关 Bash 的知识时,我了解到处理 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
$?
并不是返回值,它实际上是表示退出状态;0代表成功,1代表失败,你可以将其理解为true和false。 - Edouard Thielcurl /dev/null
退出代码为3。 - Gilles Quénotexit -1
的结果是退出值为255。 - craymichaelShell本身仅运行命令并评估其退出代码。退出代码为零表示成功;所有其他值都表示失败。
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缺乏内置运算符来检查字符串是否为空或文件是否存在。现代shell已经内置了这个命令,并且许多shell有一个扩展和现代化的版本[[
,但这并不适用于可移植脚本,因此应避免使用。 此相关问题更详细地解释了两者之间的区别。(( ... ))
引入算术上下文。同样,这是原始的Bourne shell中没有的东西(它有一个专用的外部工具expr
),但现代shell已经内置了它。算术表达式的结果代码为0,如果算术评估的结果不为0(或出现错误)。( command )
创建一个子shell并在其中评估command
。有些情况下,这实际上是必要和有用的,但如果你只是学习语法,你不太可能需要它。command
if [ $? = 0 ]; then
: things
fi
你几乎不需要显式地检查$?
,尤其是将其与零进行比较,这是if
和while
在幕后特别为您完成的。只需进行重构即可:
if command; then
: ...