C Shell
引用機構は、空白、ワイルドカード、括弧、ドル記号など通常なら特殊な意味を持つ文字をリテラルテキストとして扱えるようにする。 \ は、続く文字を通常のリテラル文字として扱う。 "string" は弱い引用である。空白やワイルドカードはリテラルとして扱われるが、変数やコマンド置換はそのまま機能する。 'string' は強い引用である。囲まれた文字列全体がリテラルとして扱われる。
言語定義上、不必要な矛盾が生じている。例えば、set、setenv、alias というコマンドは、ある名前と文字列または単語の並びを結びつけるという基本的に同じ機能を有している。しかし、それらには全く不必要な若干の差異がある。set では等号を必要とするが、setenv や alias では等号は使わない。set では単語の並びを括弧で囲む必要があるが、setenv と alias ではそうではない。同様に、if の最後は endif、switch の最後は endsw、ループ系構文では最後が end というように意味も無く一貫性がない文法になっている。
if 文には2つの形式がある。短い形式は1行で済むが、式が真の場合に実行できるコマンドはひとつだけである。
長い形式は then、else、endif というキーワードを使いコマンドの並んだブロックを形成でき、その中でさらに条件分岐を入れ子にすることもできる。
else と if が同じ行に出現する場合、csh はそれを入れ子というよりも連鎖として扱う。つまり endif はひとつでよい。
コマンド置換は、あるコマンドの出力を別のコマンドの引数として使えるようにする。 `command` は command を実行し、その出力でコマンド行の当該部分を置換する。
基本の文は単にコマンドを実行するものである。先頭の単語がコマンド名として認識され実行される。"echo" などの内部コマンドの場合と外部コマンドの場合がある。それに続く単語列は、そのコマンドの引数として渡される。
基本構文レベルでは、以下のような文法の機能が存在する。