如何使用变量作为其名称访问bash中数组的元素?我的想法是,我想在运行脚本时通过将其名称作为参数传递来选择所需的数组。所以我想我可以做这样的事情:
#!/usr/bin/env bash
arrName=$1
g=(1 32)
g5=(5 32)
m=(1 12)
m15=(1 12)
echo "${!arrName[0]}"
echo "${!arrName[1]}"
但是,虽然这将打印数组的第一个元素,但无法打印第二个元素。例如:
./myScript g
返回:
1
# The second line just has a new line character
能否请您说明正在发生的事情以及执行此操作的正确方法(如果有)?
答案 0 :(得分:1)
间接寻址不适用于数组名称。您需要使用declare -n arrName="$1"
创建 nameref ,然后从'!'
语句中删除echo
,例如
#!/bin/bash
declare -n arrName="$1"
g=(1 32)
g5=(5 32)
m=(1 12)
m15=(1 12)
echo "${arrName[0]}"
echo "${arrName[1]}"
使用/输出示例
bash nr.sh g
1
32
答案 1 :(得分:1)
涉及数组元素的间接调用需要一个临时变量,其值是数组的名称 plus 所需的索引。
arrName=$1
g=(1 32)
g5=(5 32)
m=(1 12)
m15=(1 12)
tmp0="$arrName[0]"
tmp1="$arrName[1]"
echo "${!tmp0}"
echo "${!tmp1}"
也就是说,名称引用在可用时更容易遵循。