コマンド
for
指定されたコマンドを一括して実行する。sh・bash の内部コマンド
指定されたファイルに対して、一連のコマンドを実行する。例えば複数のファイルの文字コードを変換したい場合、
% for i in file1 file2 file3
> do
> nkf -e < $i > tmp
> mv tmp $i
> done
とすると、file1、file2、file3 が順にシェル変数 $i にセットされ、nkf と mv が実行される (この例では qkc を使えば文字コードの一括変換ができるのだが)。必ず前後を do と done で挟むこと。また、
% foreach i in *.txt /tmp/hoge/a??
などとメタキャラクタを使うこともできる。
DOS でいうところの
を行うには
% for i in *.txt
> do
> cp $i $i.bak
> done
とする。拡張子の一括変換は
% for i in *.txt
> do
> cp $i ${i%.txt}.html
> done
とする。また、for は ; で区切ることで1行で書くことができる。
% for i in file1 file2 file3 ; do nkf -e < $i > tmp ; mv tmp $i ; done
for 文は sh・bash の内部コマンドである。csh・tcsh には foreach が用意されている。なお、tcsh の foreach の中で実行したコマンドはヒストリでさかのぼれないのに対して、bash の for は複数行で記述しても、ヒストリでさかのぼると ; で区切った1行の文字列として表示してくれる。bash の勝ち。