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

Mik*_*e B 7 shell

我遇到了这样的 if/then 语句:

if ! foo ; then
        echo "blah" 
        exit 1
fi
Run Code Online (Sandbox Code Playgroud)

具体if !是什么意思?“如果结果foo不是真的?” “如果退出代码foo不是 0”?

Chr*_*own 16

!反转命令退出状态的含义——它是 POSIX shell 语法的一部分,而不是if. 从POSIX 规范

如果保留字!不在管道之前,退出状态应为管道中指定的最后一个命令的退出状态。否则,退出状态应该是最后一个命令的退出状态的逻辑非。也就是说,如果最后一条命令返回零,则退出状态应为 1;如果最后一条命令返回大于零,则退出状态应为零。


jas*_*yan 11

它是一个布尔运算符,等同于逻辑not

man bash

!表达式
    如果表达式为假,则为真。

在您的示例中,如果没有foo,则 echo blah


War*_*ung 6

只是为了添加其他答案,该代码用于!避免编写这样的代码:

if foo ; then
    # everything that used to follow "fi" in the previous version
else
    echo "blah" 
    exit 1
fi
Run Code Online (Sandbox Code Playgroud)

这仅在脚本中的之后有内容时才有效fi,因为空if子句是不合法的。(评论不算数。)

以这种方式编写它会花费您一个缩进级别,核心结构化编程人员会告诉您这是值得付出的代价。这所软件开发流派说,exit程序中间的 几乎不比 好goto end,而且由于goto是一个不折不扣的邪恶,额外的嵌套级别是一种改进。

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

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

选择你的 kool-aid 并喝它。