for - Linuxコマンドのループ

スポンサーリンク

Linuxでのfor(bash)の使い方です。便利ですが、多くの言語を使うとforの構文は良く混乱してします。

また、bashのforは、リストを区切り文字によって分けてループする特徴もあります。区切り文字の環境変数であるIFSを変更することで、より便利にリストのループを行うことができます。

スポンサーリンク

forの構文

基本的なforコマンドの構文

または、C言語風にも記述可能

 

 

 

基本的なforのコマンド

基本的なforコマンドの構文は下のようになります。

 

一番オーソドックスなforコマンドの構文形式は以下のような形が多いです。

 

しかし、実用性があるかどうかを除いて、forの構文としてはリストを抜いて

または、inも抜いて

または、セミコロン(;)も抜いて、

の形式もforコマンドの構文になります。

 

この4つのうち、「in」と「リスト」を抜いた2つの構文は

リストに「$@」という特殊なパラメータがリストの代わりに繰り返されます。「$@」は全ての引数リストを表すパラメータになります。

 

また、セミコロン(;)は改行にも置き換えることができます。

シェルスクリプトで記述する際にこのような形式が好まれます。

 

実際にforコマンドを使用する際は、

のように使用します。

 

 

 

C言語風のforコマンド

C言語風のforコマンドの構文は以下のようになります。

具体的として、数字を列挙する場合は

で1から9までの数字を列挙することができます。

 

 

 

IFS

IFSとは、シェルが文字を読み取る際に区切り文字として使われる変数です。デフォルトでは、スペース、タブ、改行の3つの区切り文字が設定されています。

例えば、ファイルの名前のリストでforコマンドを用いる場合、うまく動作しません。

その場合はIFSを設定し直すことで、forコマンドをうまく動作させることができます。

また、IFSを代入するときに用いた「$''」の構文によって、ANSI-C標準の「\n」や「\t」などの特殊文字を利用できるようになります。

システムの影響などを考える場合、IFSをローカル変数にしたり、IFSのバックアップを取って使用するのも良い手だと考えられます。

 

 

 

for文の展開されている内容を確認

setコマンドのxオプションを用いることでfor文の展開されているコマンドの内容を確認することができます。

 

「set -x」を用いた場合、

の実行結果は、

になります。

また、

の実行結果は、

になります。

 

「set -x」の機能をオフにするには

を使用すれば、元に戻すことができます。

 

 

 

参考

GNU Bash manual(https://www.gnu.org/software/bash/manual/)