5

この非常に単純な csh スクリプトがあります。

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

しかし、私はエラーが発生しています": Event not found.

なにが問題ですか?

4

1 に答える 1

8

csh は、!履歴の置換に文字を使用します。したがって、シーケンス!"では、"は文字列の終了引用符として扱われません。"むしろ、コマンド ラインで入力する!fooと で始まる最新のコマンドが繰り返されるように、シェルは で始まるコマンド履歴内の何かを検索しますfoo

少なくとも元の csh では、単一引用符で囲まれた文字列であっても、この置換は常に行われます (したがって、二重引用符を単一引用符に変更しても、必ずしも役立つとは限りません)。

!文字をエスケープする唯一の方法は、\バックスラッシュを使用することです:

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

一部のシステムでは、二重引用符ではなく一重引用符を使用するとエラーが回避されることがわかりました。これは、これらのシステム/bin/cshでは へのシンボリックリンク/bin/tcshであり、動作が少し異なるためだと思います。スクリプトが必要な場合は、それに依存しないでください。携帯できるように。)

-f行にオプションも追加したことに注意してください#!。これにより、起動時にシェルが実行$HOME/.cshrcされなくなります。これは、一般的に csh スクリプトの場合に適しています。.cshrcこれにより、スクリプトの実行が少し速くなり、他の人がスクリプトを実行するときに問題になる可能性がある、自分自身の への偶発的な依存を防ぐことができます。

また、csh スクリプトについて質問がある場合は、[*] 次のリンクを投稿することが法的に義務付けられています。

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

[*]このリンクを掲載する法的義務はありません。

于 2013-10-04T15:06:06.747 に答える