#!/bin/bash
clear
ARRAY1=(STRING1 STRING2 STRING3);
STRING1=(zero one);
STRING2=(zero one two three);
STRING3=(zero one two three four);
echo ${!ARRAY1[1]}
在上面的代码中,做间接引用,只返回间接引用数组的位置0的值, 对于这种情况,我需要最简单的解决方案:
获取ARRAY1位置x的字符串,然后通过间接引用获取 数组STRING2的位置2,应该返回值“2”。
答案 0 :(得分:1)
对数组使用间接引用时,包含数组名称的变量 也必须包含索引,括号和all。就像一个数组只是一个类似命名参数的集合,而不是一个可以作为索引操作符的单个名称。
$ name=${ARRAY[1]}[2]
$ echo $name
STRING2[2]
$ echo "${!name}"
two
${!ARRAY1[1]}
解释如下。实际上,ARRAY1[1]
被用作参数的名称。由于${ARRAY1[1]}
扩展为STRING2
,因此间接扩展的处理方式与${STRING2}
相同。扩展数组 sans 索引与访问第0个元素相同,即${STRING2[0]}
。
要查看此操作,请将每个STRING
数组的第一个元素的值更改为唯一值,然后查看${!ARRAY1[0]}
,${!ARRAY1[1]}
和{{1 }}。很明显,它们分别等同于${!ARRAY1[2]}
,${STRING1}
和${STRING2}
,因此每个都会扩展到相应数组的第一个元素。