C Shell
ユーザーが定義した何らかの文字列の別名(エイリアス)を設定でき、その別名を打ち込むと C shell がそれをユーザー定義文字列に置換する。例えば "fgrep" コマンドのエイリアスとして "f" を設定しておくとキーストロークが少なくなって高速化でき、スクリプトを作るよりも簡単である。
例えば foreach の出力をパイプで grep コマンドに送り込もうとしても単に機能しない。ワークアラウンドとしては、foreach を使った部分を別のスクリプトにして構文解析の問題を回避するという手段がある。こうすれば、そのスクリプトは別のcshのプロセスとして動作するのでパイプで接続することも自由である。
別の好ましくない動作の例としてコード断片を示す。下記のスクリプトはどちらも「'myfile' が存在しないなら、'mytext' をそこに書き込む形で生成せよ」という意味である。しかし、右側の例では常に空ファイルが生成される。何故なら C shell の評価順序はコマンド行単位であり、まず入出力リダイレクトを評価することになっているためで、myfile がその際に作られてしまい、ファイルの存在を調べたときには既に存在しているためである。
また、エラーメッセージが貧弱だという点もよく批判されている。例えば "0 event not found" というメッセージからは何が問題なのかもわからない。