Mik*_*ike 0 arrays variables bash
我有大约 10 个数组,如下所示:
array_1=("Mike" "George" "Sam" "1234" "5678")
array_2=("Albert" "Isabel" "Sami" "4567" "9821")
array_3=("Michel" "Tom" "Cathy" "321" "5664")
array_4=("name 1" "name 2" "name 3" "1233" "4567")
array_5=...
Run Code Online (Sandbox Code Playgroud)
要获取单个数组元素(这是必需的,因为脚本中并未使用所有元素):
name1="${array_1[0]}"
name2="${array_1[1]}"
name3="${array_1[2]}"
number1="${array_1[3]}"
number2="${array_1[4]}"
Run Code Online (Sandbox Code Playgroud)
有时我想使用array_2(或3/4..)而不是array_1。为了避免在名称和数字的所有行中替换 (array_1),我希望使用简单的变量替换,因此尝试用不同类型的引号替换,包括:
myarray="array_1" // also tried 'array_1' and $array_1
name1="${myarray[0]}" // also tried "${$!myarray[0]}" and different quotes combinations
Run Code Online (Sandbox Code Playgroud)
在这一点上,我对 bash 引用和可能的间接引用如何适用于此示例感到有点困惑,到目前为止,找到的答案和各种尝试都不起作用,旨在看看是否有一种相当简单的方法来解决这个问题,或者应该这样做此处使用数组的方式需要更改。任何提示表示赞赏。
您需要myarray使用 来创建 nameref declare -n。
declare -n myarray=array_1
Run Code Online (Sandbox Code Playgroud)
然后,您可以像引用命名数组一样引用它:
$ echo "${myarray[0]}"
Mike
Run Code Online (Sandbox Code Playgroud)
但请注意,这仅适用于 bash 4.3+。Apple 对 GPL v3+ 过敏,因此 macOS 在 /bin 中附带了 3.2;如果您使用的是 Mac,则需要安装较新的版本(例如使用 MacPorts 或 Homebrew)。