我遇到了这样的 if/then 语句:
if ! foo ; then
echo "blah"
exit 1
fi
具体是什么if !
意思呢? “如果结果foo
不正确呢?” “如果退出代码foo
不为0”?
答案1
!
反转命令退出状态的含义——它是 POSIX shell 语法的一部分,而不是if
.来自POSIX 规范:
如果保留字!不在管道之前,退出状态应为管道中指定的最后一个命令的退出状态。否则,退出状态应为最后一个命令的退出状态的逻辑“非”。也就是说,如果最后一个命令返回0,则退出状态为1;如果最后一个命令返回大于零,则退出状态应为零。
答案2
它是一个布尔运算符,相当于逻辑不是。
看man bash
:
!
如果表达式为假,则表达式为真。
在您的示例中,如果没有foo
,则 echo blah
。
答案3
只是为了添加其他答案,该代码用于!
避免编写如下代码:
if foo ; then
# everything that used to follow "fi" in the previous version
else
echo "blah"
exit 1
fi
仅当存在时才有效是fi
脚本中的后面的内容,因为空if
子句是不合法的。 (评论不算数。)
以这种方式编写它会花费你一个缩进级别,这是硬核的结构化编程人们会告诉你这是值得付出的代价。该软件开发学院表示,exit
程序中间的 并不比 更好goto end
,而且由于它goto
是一种彻头彻尾的邪恶,因此额外的嵌套级别是一种改进。
一所竞争学校说:“是的,缩进很棒,直到你将所有代码都从屏幕右侧推出。”
然后你就会看到那些认为两个阵营都有点疯狂的人,并且只是观察到最好尽可能避免负面逻辑,并且正常情况应该是第一个,例外情况在程序结束时关闭。
选择你的酷爱饮料并喝掉它。