Answers:
!
命令开始处的孤行会否定命令或管道的退出状态:如果命令退出0
,它将翻转为1
(失败),如果退出非零,则将其变为0
(成功)退出。
Bash手册中记录了这种用法:
如果保留字为“!” 在管道之前,退出状态是如上所述退出状态的逻辑取反。
一个!
没有下面的命令否定了空命令,该命令不执行任何操作,并返回true(相当于该:
命令)。因此,它将true转换为false并以状态1退出,但不会产生错误。
还有的其它用途!
的内test
和[[
命令,在那里他们否定条件测试。这些与您所看到的无关。在您的问题和这些情况下,它都与历史记录扩展无关,并且与!
其他任何术语都分开。
因为!
用于比较中,表示NOT。
例如:
a=3
b=2
[ $a -eq $b ] && echo "Equal"
[ ! $a -eq $b ] && echo "Not equal"
# of cause last comparison is possible to write as:
[ $a -eq $b ] || echo "Not equal"
[ $a -eq $b ]
echo $?
1
[ ! $a -eq $b ]
echo $?
0
!
作为test
命令参数(包括bash的内置版本)的含义,而不是!
在命令位置使用的含义。
! [...]
在这种情况下,需要匹配该问题。
[]
是test
。我有点着急。
!紧跟着一个字符串的字符串将执行以给定字符串开头的最近的上一条命令(仍在命令缓冲区中)。也许shell只是发现以前的命令都没有以<null>开头。
!
表示历史扩展表达式的“开始”。