我能';是否运行awk手册中的第一个示例?

我能';是否运行awk手册中的第一个示例?,awk,Awk,awk手册将此列为首批示例之一: awk "BEGIN { print \"Don't Panic!\" }" 显然我应该看到“不要惊慌!”,但实际上我看到: -bash: !\": event not found 有什么想法吗?试试看 awk "BEGIN { print \"Don't Panic\!\" }" 这应该可以做到这一点(在zsh下)。这取决于您的shell > bash $ awk "BEGIN { print \"Don't Panic!\" }" bash: !

awk手册将此列为首批示例之一:

awk "BEGIN { print \"Don't Panic!\" }"
显然我应该看到“不要惊慌!”,但实际上我看到:

-bash: !\": event not found
有什么想法吗?

试试看

awk "BEGIN { print \"Don't Panic\!\" }"

这应该可以做到这一点(在zsh下)。

这取决于您的shell

> bash
$ awk "BEGIN { print \"Don't Panic!\" }"
bash: !\": event not found
$ tcsh
> awk "BEGIN { print \"Don't Panic!\" }"
Unmatched '.
> sh
$ awk "BEGIN { print \"Don't Panic!\" }"
Don't Panic!
$ 
现代shell使用感叹号来引用部分命令行历史记录。在
bash
tcsh
中,它们可以被解释为历史参考。你可以逃出
\
,或者您可以不使用它,或者您可以使用一个简单的shell


在上面我的
bash
示例中,您可以看到失败的历史替换。在我的
tcsh
示例中,您看到了引号的问题(因为双引号不能以这种方式转义)。您正在使用的awk手册可能已经足够旧了,它不会假设每个人都运行bash。

太好了-这很有效!(但我得到了
警告:转义序列
\!'被视为普通的`!')看看:-)在旁注上,你可以在
bash
中使用
set+H
禁用历史扩展。啊,说得好。另一方面,这种历史扩展问题只适用于交互式shell;脚本中没有历史事件。