UNIX/Linuxの部屋 forコマンドの使い方

TOP UNIX/Linuxの部屋 UNIX/Linuxコマンド一覧 用語集 新版 由来/読み方辞書 環境変数マニュアル Cシェル変数 システム設定ファイル システムコール・ライブラリ ネットワークプログラミングの基礎知識 クラウドサービス徹底比較・徹底解説




コマンド 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 でいうところの
% copy *.txt *.txt.bak
を行うには
% 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 の勝ち。