🍛

Bashで配列を使用する

2022/03/20に公開

配列を宣言するには、配列の変数名と = に続けて、各要素の全体を () で囲みます。1つの要素内にスペースが含まれる場合は、 ""'' で固めます。

veggies=(carrots onions "Italian tomatoes" potatoes)

変数を普通に呼ぶと、最初の要素が返ります[1]

echo $veggies
carrots

2番目の要素を得るには、インデックスを指定します。変数名とインデックスを {} で囲み、 $ から離す必要があります。

echo ${veggies[1]}
onions

末尾の要素は、インデックスの数字に - を付けることでアクセスできます。

echo ${veggies[-1]}
potatoes

要素の全体を出力するには、インデックスに @ を与えます。 [@] は全体という意味として解釈するとよさそうです。

echo ${veggies[@]}
carrots onions Italian tomatoes potatoes

変数名の前に # を付けると、配列の要素の個数が得られます。 # はnumber signとも呼ばれます。

echo ${#veggies[@]}
4

変数名の前に ! を付けると、各要素のインデックスが得られます。

echo ${!veggies[@]}
0 1 2 3

配列の要素を順に処理するには for を使用します。配列は in の後に置きますが、 "" で固める必要があります[2]

for veggie in "${veggies[@]}"
do
  echo I added $veggie to my curry.
done
I added carrots to my curry.
I added onions to my curry.
I added Italian tomatoes to my curry.
I added potatoes to my curry.

"" で括らなかった場合、イタリア人がカレーに入ります。

for veggie in ${veggies[@]}
do
  echo I added $veggie to my curry.
done
I added carrots to my curry.
I added onions to my curry.
I added Italian to my curry.
I added tomatoes to my curry.
I added potatoes to my curry.
脚注
  1. Using the array name without an index gets the first array element in Bash, ok? - Stack Overflow ↩︎

  2. bash - Why is "${ARRAY[@]}" expanded into multiple words, when it's quoted? - Unix & Linux Stack Exchange ↩︎

Discussion