-bash:!/ usr/bin/env:找不到事件

cod*_*321 2 python linux macos bash echo

我收到了这个奇怪的错误消息,试图将shebang写入python脚本:

$ echo "#!/usr/bin/env python" > scripts/sandbox.py 
-bash: !/usr/bin/env: event not found

$ echo "say what?" > scripts/sandbox.py
Run Code Online (Sandbox Code Playgroud)

立刻,做同样的事情,但没有使用shebang线工程.这种行为是什么以及如何克服?谢谢

Sto*_*ica 9

!是bash的特殊字符,它用于引用以前的命令.它在双引号内扩展.为避免这种情况,请将它们用单引号括起来:

echo '#!/usr/bin/env python' > scripts/sandbox.py 
Run Code Online (Sandbox Code Playgroud)

@ mklement0在评论中明确地澄清了它:

更具体地说,!Bash的历史扩展功能是特殊的,默认情况下(仅)在交互式shell中启用.除了通过使用单引号字符串来避免它,它可以完全关闭set +H

  • 更具体地说,`!`对于Bash的_history expansion_ feature是特殊的,它在默认情况下(仅)在交互式shell中启用.除了通过使用单引号字符串来避免它,它可以与`set + H`完全关闭. (2认同)