【发布时间】:2021-05-18 14:34:38
【问题描述】:
在 bash 中,我不明白为什么第三条命令不正确:
[[ 1 -eq 1 ]] # $? is 0
[[ ! 1 -eq 1 ]] # $? is 1
[[ ! ! 1 -eq 1 ]] # $? is 1 (??)
[[ ! ( ! 1 -eq 1 ) ]] # $? is 0
如果我将1 -eq 1 替换为任何真表达式,并用任何假表达式取反,似乎会做同样的事情。
【问题讨论】:
-
FWIW,
[[ ! ! 1 == 1 ]]; echo $?在zsh中按预期工作。 -
"expected" -- POSIX
test标准没有设定这种期望。 -
我的期望是:
syntax error -
@WilliamPursell, ...当然,语法错误将始终具有非成功退出状态,因此这与 OP 报告的
1一致。 (它还符合[的 POSIX 指南,因为语法错误是人们在收到未指定行为的输入时可以合法做的一系列事情的成员。 -
@vimene, ...关于“结果未指定”的美妙之处之一是 anything 是允许的。正如 C 标记中的人们所说的那样,给定调用未指定行为的输入,编译器可能会发出吃掉你的猫的代码;任何事情都是允许的。
标签: bash shell command-line