以下失败,我不明白为什么:
$ echo "#!"
以下也失败并出现相同的错误消息:
$ echo "\#!"
错误消息:
-bash: !": event not found
为什么会失败?应该如何echo
改为完成?
The !
字符用于csh
风格的历史扩展。
如果您不使用此功能,set +o histexpand
(aka set +H
) 关闭此行为。它对于脚本是关闭的,但通常会在交互式使用时启用。在这种情况下,我个人的建议是通过添加来永久关闭它set +o histexpand
给你的.bash_profile
(or .bashrc
如果你没有.bash_profile
;这比我想尝试放入括号中的更复杂)。
作为解决方法,如果由于某种原因您不能或不想关闭并忘记此遗留问题csh
功能,您可以使用单引号而不是双引号 - 当然,请记住它们不同的语义。例如,如果您需要将引用与变量插值结合起来,您可以更改
echo "#!$SHELL" # oops, history expansion breaks this
into
echo '#!'"$SHELL"
(注意相邻的单引号和双引号字符串;shell 完成此操作后,引号将被删除,字符串#!
将在变量值旁边输出SHELL
它们之间没有空格)或许多其他常见的解决方法,例如
printf '#!%s\n' "$SHELL"
...虽然正如评论中所说,即使单引号在管道末尾时不一定能防止这种情况发生。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)