为什么双引号内的感叹号会导致Bash错误?

Modified on: Sat, 09 Jun 2018 14:05:23 +0800

请查看以下命令:

$ notify-send SYNC TIME!
$ notify-send 'SYNC TIME!'
$ notify-send "SYNC TIME!"
bash: !": event not found
$

前两个命令会按预期生成通知气泡。第三个给出了显示的错误。

$ echo SYNC TIME!
SYNC TIME!
$ echo 'SYNC TIME!'
SYNC TIME!
$ echo "SYNC TIME!"
bash: !": event not found
$

此处,echo适用于前两个命令,但不适用于第三个命令。

这里有更多问题(虽然我不打算使用它):notify-send "SYNC!TIME"echo "SYNC!TIME"bash: !TIME": event not found

但是notify-sendecho都可以使用"SYNC! TIME"

有人可以解释为什么会出现bash: !": event not found错误吗?

最佳答案

!是Bash中的默认历史记录扩展字符,请参阅Bash手册页

  • 如果!用单引号括起来,就不会发生历史记录扩展,如

    notify-send 'SYNC TIME!'
    
  • 如果!后跟空格,制表符,换行符,回车符或=,则不会发生历史记录扩展,如

    notify-send SYNC TIME!
    
  • 历史记录扩展

    中进行

    echo "SYNC TIME!"
    

    如果您的历史记录中没有以"开头的命令,那么您将收到错误


相关问答

添加新评论