【FreeBSD】Cシェルのハマりどころ

C系シェルを使っていて困ったことなど。
ハマったら書くスタイルで随時更新。

環境変数の設定

setenv VARNAME VALUE  

スクリプトでの引数

記法 意味
$0 プログラム名
$1,$2, ... $9 引数1, 引数2, ... 引数9
$* 引数全てを展開
$#argv 引数の数
$argv[n] 引数nを展開
$argv[1-n] 引数1〜nまで展開
$argv[$#argv] 末尾の引数

エイリアスでの引数

記法 意味
'\!:1','\!:2',... 引数1, 引数2, ...
'\!*' 全引数展開

シングルクォーテーションで囲んでおくが無難

リダイレクト

標準エラーの扱い方がB系と違うので注意。
未だに標準エラーだけを次に渡す方法がわからず。

記法 意味など
cmd > file cmdの標準出力をfileへ上書き
cmd >> file cmdの標準出力をfileへ追記
cmd < file cmdの標準入力へfileをつなぐ
cmd >& file cmdの標準エラーを標準出力と一緒にする
B系だと cmd > file 2>&1
cmd |& next-cmd cmdの標準エラーを標準出力と一緒にしてパイプへ
B系だと cmd 2>&1 | next-cmd
(cmd > /dev/tty) >& /dev/null 標準エラーのみ捨てる
B系だと cmd 2> /dev/null
((cmd > /dev/tty) >& /dev/null) | less 標準エラーのみ捨てて、標準出力はパイプへ
B系だと cmd 2> /dev/null | less
cmd >! file noclobberの設定を無視
cmd >>! file noclobberの設定を無視
cmd >&! file noclobberの設定を無視
  • noclobber 存在するファイルへのリダイレクトを抑止するフラグ(上書防止用)

参考