宣言された配列変数の代入

宣言された配列変数の代入

(ここでbashを初めて使用)

Bashはデータベーステーブルを含む配列を正常に作成し、それを繰り返しました。スクリプトの上部でこの配列を宣言し、それを別の変数に割り当てたいと思います。

my_databases=(value1 value2 value3)

これを繰り返すとうまくいきます。for i in "${my_databases[@]}"

それが問題です: 繰り返したくありませんが、my_databases途中で配列を変数に割り当てる手順がありますnew_array

new_array=$my_databases

これを繰り返すと、new_array最初の配列値の後にスクリプトが失敗します。宣言された配列を新しい変数に正しく割り当てる方法は?

答え1

新しい配列変数を作成するには、次のように古い配列の値を新しい配列に割り当てます。

my_databases=(value1 value2 value3)
new_array=("${my_databases[@]}")

使用する場合

new_array=$my_databases

新しい変数は配列ではなく(を使用しない限りdeclare -a new_array=$my_databases)、$my_databases配列の最初の値としてのみ拡張されます。

答え2

私はあなたがコピーソート。それから@Freddyの答えを使用してください。

作成したい場合引用する到着同じデータ、最新バージョンのbashには「namerefs」があります。

$ my_databases=(value1 value2 value3)
$ declare -n new_array=my_databases

それから:

$ for i in "${!new_array[@]}"; do printf "%d\t%s\n" $i "${new_array[i]}"; done
0   value1
1   value2
2   value3

ただし、最初の配列を変更すると、変更は「新しい」配列に表示されます。

$ my_databases[2]="updated value 3"
$ for i in "${!new_array[@]}"; do printf "%d\t%s\n" $i "${new_array[i]}"; done
0   value1
1   value2
2   updated value 3

関連情報