发布于 2012-10-07 10:23:22
您列出的测试:
test
test
,但功能更强大)的语法
不是详尽的,您可以使用布尔逻辑。
if command; then ...
也是如此,因为命令具有退出状态。在bash
中,0
是true
,> 0
是false
。
您可以看到如下的退出状态:
command
echo $?
请参见:
http://wiki.bash-hackers.org/syntax/basicgrammar
发布于 2018-04-08 16:34:07
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
命令[
(也称为test
)在条件句中非常常用,因为原始的Bourne shell缺少内置的操作符来检查字符串是否为空或文件是否存在。现代的sh
内置了这个命令,并且许多shell都有一个扩展的和现代化的版本shell,但是这不能正确地移植到POSIX,因此应该避免使用可移植的脚本。This related question更详细地解释了两者之间的差异。
符号(( ... ))
引入了算术上下文。同样,这不是原始的Bourne shell的一部分(它有一个专门的外部工具expr
来处理这些事情),但现代的shell已经内置了这个。如果算术求值的结果不是0(或错误),则算术表达式的结果代码为0。
符号( command )
创建一个子外壳,并在其中计算command
。在某些情况下,这实际上是必要的和有用的,但如果您刚刚学习语法,则不太可能需要它。
..。事实上,在我见过的大多数脚本中,这是在条件句中使用的,这显然是不必要的。
另一个需要注意的反模式是
command
if [ $? = 0 ]; then
: things
fi
您几乎不需要显式地检查$?
,尤其是,将它与零进行比较是if
和while
在幕后专门为您做的事情。这应该被简单地重构为
if command; then
: ...
https://stackoverflow.com/questions/12765340
复制相似问题