
私のSolaris 10 cshの実装に問題があります。もしまたは私は正しいことを得ていません(まあ、少なくとも私の場合は2番目のものが最も可能性が高いです)。しかし、私がそうすれば:
% if 1 then <enter>
%
=>何も起こらなかった
私がこれを行うとき:
% if 0 then
?
=>最初の状況でもそう思いました。そうでなければ、私は以下を得ることなく私の声明の構成を完了することができません。
if: improper then
「cshを使用しないでください」と賛成の答えを開始しないように本当に懇願することができますか?本当に欲しいならこれで終わってもいいです。ここ数年、cshはこれまで対話的な目的で私に多くの助けを与えてきましたが、私が書いたこの小さなスクリプトではBourneシェルまたはbashを使用していました。
ありがとう
答え1
まず、endif
閉じる保留中のif(s)がないと(cshで)何もできません。実行しても効果はありません。
% endif
%
したがって、ifの後に続くコマンドが実行されることが明らかな場合(cと同様にcshの場合は値が1であるため)、実行を遅らせる必要はなく、すぐに「許可」されます。 :
% if (1) then
% echo yes
yes
% echo no
no
% endif
endif
ただし、false値(0)の場合、aが実行されるまで実行は回避されます。
% if (0) then
? echo yes
? echo no
? endif
%
これがcshがどのように機能するかです。
注:同意しませif: improper then
んif 0 then
。たぶんエラーが別の場所にあるかもしれません。
編集する
うーん…おそらく少し説明が必要だと思います。私が書いている場合(<enter>
明確にするために追加する前にスペースを追加して無視してください):
% if 0 then <enter> !!!!!!!!!!!!!
? echo Hello there
? echo Yes
? endif
%
エラーは発生しません。
私が書いた場合:
% if 0 then echo Hello there <enter> !!!!!!!!!!!!!
% if: Improper then.
私はあなたの間違いを理解しています。
答え2
この値はシェルレベルの値1
と同じです。FALSE
また、これはキーワードではなく組み込みコマンドであるcsh
ため、少し不可解であることに注意してください。if
csh
では、組み込み関数が別のパーサを呼び出して文を完全に読み取るまで読み込みますcsh
。if
FreeBSDやLinuxとはcsh
異なり、Solarisのバイナリは同じではありませんが、tcsh
異なります。しかし、tcsh
これはSolarisでも同様です。
通常、cshは一貫性がありません。例をご覧ください。http://www.faqs.org/faqs/unix-faq/shell/csh-whynot/