我有一个非常简单的csh脚本。
#!/bin/csh
echo "Hello World!"
echo "How are you today?"但是我得到了错误": Event not found.
怎么啦?
发布于 2013-10-04 23:06:07
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
*我实际上没有法律义务张贴这个链接。
https://stackoverflow.com/questions/19174808
复制相似问题