シェルスクリプトで全ての引数だけfor文でループ処理するには、下記のようなコードになります
#!/bin/bash
for i in "${@}"; do
echo $i
done
for文の構文は以下のようになります
for 変数 in 値リスト do 処理 done
「${@}」は、全引数を表しますので、forの構文は以下のよに「${@}」を値リストに設定します
また、ダブルコーテーションで「“${@}”」のように囲むと引数にスペースなどの特殊文字が含まれている場合にも正しく処理されますので、「“${@}”」で囲んだほうがいいです
ダブルコーテーションの有無で、処理がどのように違うか下記のコードを作成しました
# ダブルコーテーションがある場合
$ vim test.sh
#!/bin/bash
for i in "${@}"; do
echo $i
done
$ sh test.sh aaa bbb "cc dd"
aaa
bbb
cc dd
# ダブルコーテーションがない場合
#!/bin/bash
for i in ${@}; do
echo $i
done
$ sh test.sh aaa bbb "cc dd"
aaa
bbb
cc
dd
ダブルコーテーションがない場合は、空白を含む引数の場合は、別々に引数となる場合があるので、ダブルコーテーションで囲ったほうが良いです。
また、「“${@}”」がないような下記のコードでも同じ動きとなります
# 全引数の「"${@}"」を省略しても同じ動作になります
$ vim test.sh
#!/bin/bash
for i; do
echo $i
done
$ sh test.sh aaa bbb "cc dd"
aaa
bbb
cc dd


コメント