使用变量作为数组的名称,并在bash中获取其元素之一

时间:2018-12-14 10:14:18

标签: bash

如何使用变量作为其名称访问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 

能否请您说明正在发生的事情以及执行此操作的正确方法(如果有)?

2 个答案:

答案 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}"

也就是说,名称引用在可用时更容易遵循。