我有这个非常简单的 csh 脚本。
#!/bin/csh
echo "Hello World!"
echo "How are you today?"
但我得到了错误": Event not found.
怎么了?
我有这个非常简单的 csh 脚本。
#!/bin/csh
echo "Hello World!"
echo "How are you today?"
但我得到了错误": Event not found.
怎么了?
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
[*]我实际上没有法律义务发布此链接。