回声“#!”失败 – “未find事件”
以下失败,我不明白为什么:
$ echo "#!" 以下也失败,同样的错误信息:
 $ echo "\#!" 
错误消息:
 -bash: !": event not found 
 为什么会失败? 应该怎么做echo呢? 
 那! 字符用于csh风格的历史扩展。 
 如果您不使用此function,请set +o histexpand (又名set +H )closures此行为。 它closures了脚本,但通常启用交互式使用。 
作为一个解决方法,你可以使用单引号而不是双引号 – 记住coure,它们的不同的语义。 例如,如果需要将引用与variables插值相结合,则可以更改
 echo "#!$SHELL" # oops, history expansion breaks this 
成
  echo '#!'"$SHELL" 
  (注意相邻的单引号和双引号的string; shell完成后,引号将被删除,并且string#!将被输出到variablesSHELL的值旁边,它们之间没有空格)或者其他常见的解决方法的数量 
  printf '#!%s\n' "$SHELL" 
 默认情况下,bash支持csh兼容的历史扩展。 
在bash中
 echo #! 
 将只打印一个换行符,因为#开始评论。 
在
 echo "#!" 
  #是以"开始的string的一部分" ,这样的string仍然是由bash检查特殊字符的, !是一个特殊的字符,如果后面跟着任何其他的文本。 
 -bash: !": event not found 
 在这种情况下,bash需要!"标记来引用shell历史中以"开始的前一个命令,并且没有find一个。 一切都靠自己! 不会触发这种行为: 
 $ echo \# ! # ! $ echo fee ! fie fee ! fie 
最后,
 $ echo !echo 
产生两行,第一行是由shell打印显示如何扩展到上面的模式:
 echo echo '# !' 
而第二行只是执行扩展命令的结果:echo#!
另请参阅: History Expansion上的Bash手册页
 echo '#!' 
 基本上,用双引号( " )又名”弱引用“,Bash用string做了一些古怪的事情,比如variablesreplace,用单引号强调引用string。 
请参阅此处以获取对引用的更深入的解释。
在我的情况下,所有的命令工作。 也许你可以指定你的环境。
 $ echo "\#\!" \#\! $ echo "#!" echo "#" # $ echo "#!" echo "#" # $ echo $BASH_VERSION 3.2.48(1)-release 
另一个解决方法可能是在“!”之后放置额外的空间 :
 # echo "#! " #!