(ここで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