Bash 3.0はリストをサポートしていませんか?

Bash 3.0はリストをサポートしていませんか?

構成ファイルから取得した特定のIPアドレスを追加してリストに入れる小さなスクリプトを作成しました。

  WAS_IP=$(grep "<was_ip>" $CONFIG| cut -d '>' -f 2 | cut -d '<' -f 1 | xargs)

  NODES=()
  NODES+=("$WAS_IP")

Bashでは3.2.25うまく機能しますが、本番3.0環境ではエラーが発生します。

./config.sh: line 3154: syntax error near unexpected token `"$WAS_IP"'
./config.sh: line 3154: `      NODES+=("$WAS_IP")'

この問題をどのように回避できますか?

答え1

この+=演算子はBashバージョン3.1に登場しました。

  • 以前のバージョンでは、配列がリーンでない場合は、配列の最後の要素の後の要素に割り当てることができました。

    NODES[${#NODES[@]}]="$WAS_IP"
    

    どこかに新しい値を追加する場合は、別のカウンタ変数を使用できます。

    NODES=()
    NODES_length=0
    NODES[NODES_length++]="$WAS_IP"
    

    しかし、これは配列の長さを求めるよりも高速です${#NODES[@]}

  • あるいは、配列全体を既存の要素と新しい要素に割り当てることもできます。

    NODES=("${NODES[@]}" "$WAS_IP")
    

    言うまでもなく、後者のシナリオは避けるのが最善です。配列が最初にまれな場合、配列インデックスは割り当て後に変更されます。

関連情報