猿问

回声“#!”失败-“事件未找到”

回声“#!”失败-“事件未找到”

以下内容失败了,我不明白为什么:

$ echo "#!"

使用相同的错误消息,下列操作也会失败:

$ echo "\#!"

错误信息:

-bash: !": event not found

为什么会失败?如何echo取而代之的是?


慕田峪7331174
浏览 310回答 3
3回答

阿波罗的战车

这个!字符用于csh-风格的历史扩展。如果不使用此功能,set +o histexpand(又名set +H)停止这种行为。它是关闭的脚本,但经常启用的交互式使用。作为解决办法,您可以使用单引号而不是双引号-当然要记住它们的不同语义。例如,如果需要将引用与变量插值相结合,则可以更改echo "#!$SHELL"  # oops, history expansion breaks this进 echo '#!'"$SHELL"(请注意相邻的单引号和双引号字符串;在shell完成此操作后,将移除引号并删除字符串。#!将在变量的值旁边输出。SHELL)或其他一些常见的解决办法,如 printf '#!%s\n' "$SHELL"

ITMISS

默认情况下,bash支持csh兼容历史-扩展。巴什echo #!将只打印换行符,如#开始评论。在……里面echo "#!"这个#开始的字符串的一部分。"..bash仍然检查这些字符串是否有特殊字符。!是一个特殊的字符当且仅当它后面跟着任何其他文本。-bash: !": event not found在本例中,bash期望!"令牌引用shell历史记录中的前一个命令,以"却找不到。独自一人,!不会触发此行为:$ echo \# !# !$ echo fee ! fie fee ! fie最后,$ echo !echo生成两行,第一行由shell打印,以显示上面的模式如何扩展到:echo echo '# !'虽然第二行只是执行扩展命令的结果:echo#!另见:Bash手册页在……上面历史扩展

德玛西亚99

echo '#!'基本上,用双引号(")又称“弱引用”,Bash用字符串做一些奇怪的事情,比如变量替换。单(')又称“强引用”字符串是字面意思。见A.这里以获得更深入的引证解释。
随时随地看视频慕课网APP

相关分类

Python
我要回答