bashで配列に要素を追加

Bashで配列とforループを使ってこういうことをやりたい。

[code lang="python"]

# Pythonの例

spam = ["Wilson", "Brewster", "Koko", "Hoot", "Toot", "Piper"]

for ham in eggs:

spam.append(ham)

[/code]

調べて書いてみたのが、このBash

[code lang="shell"]

SPAM=()

EGGS=(Wilson Brewster Koko Hoot Toot Piper)

for *1

do

SPAM+=(${EGGS[$i]})

done

[/code]

分かったつもりで動かしてるけど、数カ月後にはこのスクリプトを読めなくなっている自信にあふれているので、未来の自分へ説明書きを加えておきます。

1行目

  • Bashで変数を宣言するときは、変数と代入演算子と値の間に空白を入れない。

2行目

  • Bashで文字列を変数に代入するとき、Pythonのようにダブルクォテーションやシングルクォテーションで囲む必要はない。(正確には、Bashでは"文字列しか"変数に代入できない)
  • Bashで配列に値をまとめて代入するときは、カンマ区切りではなく、スペース区切り。

3行目

  • ${#variable[@]}は配列の長さを返す。

  • 例:

[code lang="shell"]

foo=("bar baz")

echo ${#foo[@]}     #配列fooの要素数として「1」が返ってくる

foo=(bar baz)

echo ${#foo[@]}    # 配列fooの要素数として「2」が返ってくる

echo $foo[@] # 配列fooの全要素として「bar baz」を表示する

[/code]

6行目

  • 配列への要素の追加は「 配列の変数+=(配列の要素)」と書けばPythonのappendと等価。

*1: i = 0; i < ${#EGGS[@]}; i++