分配声明的数组变量

分配声明的数组变量

(这里是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

相关内容