“如果!” 是什么意思?意思是?

“如果!” 是什么意思?意思是?

我遇到了这样的 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是一种彻头彻尾的邪恶,因此额外的嵌套级别是一种改进。

一所竞争学校说:“是的,缩进很棒,直到你将所有代码都从屏幕右侧推出。”

然后你就会看到那些认为两个阵营都有点疯狂的人,并且只是观察到最好尽可能避免负面逻辑,并且正常情况应该是第一个,例外情况在程序结束时关闭。

选择你的酷爱饮料并喝掉它。

相关内容