Linux‎ > ‎

シェル - 任意の数の引数を連続的に処理する


例1:args-loop1.sh
while [ $# -gt 0 ]
do
	# 処理
	echo "$1"
	shift
done
例2:args-loop2.sh
while [ "$1" != "" ]
do
	# 処理
	echo "$1"
	shift
done

例1・例2は共にshiftコマンドを使用した処理。継続条件の判定方法は少し異なるだけ。例1は配列の数だけきっちり繰り返す。万が一、空文字の項目があってもそれは1つの項目として扱う。例2は空文字の項目があった場合には処理を中断してしまう。ケースバイケースではあるが、例1のほうがスマートだし意味合いをきちんと捉えた記述である。

例1実行例
./args-loop1.sh 1 "" 3
1

3

例2実行例
./args-loop2.sh 1 "" 3
1

shiftコマンドを使ったループは、変数を新たに宣言せずに「$1」などを使用できる。shiftコマンドをうまく利用したスマートな方法(だと思う)。ただし、shiftを使うので当然パラメータの位置がずれるため、引数の評価を繰り返し行なう場合には不向き。

例3
for INDEX in $*
do
	# 処理
	echo "${INDEX}"
done

例3は割りと普通のfor文。これだと引数の位置をずらさずに済むので、引数の評価が繰り返し行なうような場合にも問題なく対応できる。

2011/06/06