5

我有这个非常简单的 csh 脚本。

#!/bin/csh
        echo "Hello World!"
        echo "How are you today?"

但我得到了错误": Event not found.

怎么了?

4

1 回答 1

8

csh 使用该!字符进行历史替换。所以在序列中!""不被当作字符串的右引号;相反,shell 会在您的命令历史记录中搜索以 开头的内容",就像!foo在命令行键入会重复以 . 开头的最新命令一样foo

至少对于原始的 csh,这种替换总是完成的,即使在单引号字符串中也是如此(因此将双引号更改为单引号不一定有帮助)。

转义字符的唯一方法!是使用\反斜杠:

#!/bin/csh -f
echo "Hello World\!"
echo "How are you today?"

(在某些系统上,我发现使用单引号而不是双引号确实可以避免错误。我认为这是因为在这些系统上/bin/csh是一个符号链接到/bin/tcsh,它的工作方式有点不同。如果你想要你的脚本,你不应该依赖它便于携带。)

请注意,我还在-f该行中添加了一个选项#!。这可以防止 shell$HOME/.cshrc在启动时执行你的,这通常是 csh 脚本的好主意。它使它们运行得更快一些,并且可以防止意外依赖于您自己的.cshrc,这在其他人运行您的脚本时可能会出现问题。

在任何关于 csh 脚本的问题中,我有法律义务 [*] 发布此链接:

http://www.perl.com/doc/FMTEYEWTK/versus/csh.whynot

[*]我实际上没有法律义务发布此链接。

于 2013-10-04T15:06:06.747 回答