(这里是bash新手)
在 bash 中,我成功创建了一个包含数据库表的数组,然后循环遍历它们。我想在脚本顶部声明这个数组,然后将其分配给另一个变量。
my_databases=(value1 value2 value3)
循环遍历这个效果很好for i in "${my_databases[@]}"
问题就在这里:
我不想循环,而是my_databases
在中间有一个步骤,我想将数组分配给一个变量new_array
。
new_array=$my_databases
现在,当我循环遍历 this 时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