Arrays 如何动态获取变量名

Arrays 如何动态获取变量名,arrays,bash,loops,Arrays,Bash,Loops,但我有一个替换错误 顺便说一句,我正在写一本中国十二生肖手稿。我相信你在寻找间接性: sDay=${$rat[$Scounter]:0:2}; 将上述内容用作循环的一部分: $ rat=(05021924 23021925 24011936 10021937 10021948 28011949 28011960 14021961 15021972 02021973 02021984 19021985 19021996 06021997 07022008 25012009 25012020 11

但我有一个替换错误


顺便说一句,我正在写一本中国十二生肖手稿。

我相信你在寻找间接性:

sDay=${$rat[$Scounter]:0:2};
将上述内容用作循环的一部分:

$ rat=(05021924 23021925 24011936 10021937 10021948 28011949 28011960 14021961 15021972 02021973 02021984 19021985 19021996 06021997 07022008 25012009 25012020 11022021 11022032 30012033)
$ y="rat[1]"; echo "${!y}"
23021925
$ y="rat[1]"; echo "${!y:0:2}"
23
它产生输出:

for x in rat pig
do
    for i in 0 1
    do
        y="$x[$i]"
        echo "$x $i ${!y}"
    done
done
文档 从
manbash

${parameter}
替换参数的值。当参数是具有多个数字的位置参数时,或当参数为 后跟一个不能解释为其名称一部分的字符。该参数为外壳参数(如上所述参数),或 数组引用(数组)

如果参数的第一个字符是感叹号(!),则 引入了一个级别的变量间接寻址。Bash使用 由参数的其余部分组成的变量,作为 变量然后展开此变量,并在 替换的其余部分,而不是参数的值 它本身这就是所谓的间接扩张。例外情况 下面介绍了${!prefix*}和${!name[@]}的扩展。 感叹号必须紧跟在左大括号之后 引入间接性。[增加重点。]

for x in rat pig
do
    for i in 0 1
    do
        y="$x[$i]"
        echo "$x $i ${!y}"
    done
done
rat 0 05021924
rat 1 23021925
pig 0 04021935
pig 1 23011936