zzztkfの日記: for
日記 by
zzztkf
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??
などとメタキャラクタを使うこともできる。
% for i in *.txt
> do
> cp $i $i.bak
> done
とすると、DOS でいうところの
% copy *.txt *.txt.bak
ができる。
% 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 の勝ち。
指定されたファイルに対して、一連のコマンドを実行する。例えば複数のファイルの文字コードを変換したい場合、
% 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??
などとメタキャラクタを使うこともできる。
% for i in *.txt
> do
> cp $i $i.bak
> done
とすると、DOS でいうところの
% copy *.txt *.txt.bak
ができる。
% 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 の勝ち。