シェルスクリプトで引数でループする処理する方法(for文)

シェルスクリプトで全ての引数だけ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

 

 

スポンサーリンク

0
0