2

awk 手册将此列为第一个示例:

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

显然我应该看到“不要惊慌!”,但实际上我看到了:

-bash: !\": event not found

有任何想法吗?

4

2 回答 2

4

这一切都取决于你的外壳。

> 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 使用感叹号来表示命令行历史的一部分。在bashtcsh中,它们可以被解释为历史参考。您可以使用 转义!\也可以将其排除在外,也可以使用简单的 shell。

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

于 2012-09-13T12:18:33.663 回答
2

尝试

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

这应该可以解决问题(在zsh下)。

于 2012-09-13T12:00:18.837 回答