bash中数组的双重替换
我的脚本中几乎没有数组bash中数组的双重替换,bash,Bash,我的脚本中几乎没有数组 a=(1 2 3) b=(3 4 5) 用户输入要打印的列表 ./array.sh a 如何打印数组的元素 我已尝试执行以下操作,但无法打印 array=$1 echo ${!array[@]} 您可以使用declare-n作为变量的命名引用,如下所示: a=(1 2 3) b=(3 4 5) declare -n arr="${1?need an array name}" printf "%s\n" "${arr[@]}" 然后按如下方式执行: ./arra
a=(1 2 3)
b=(3 4 5)
用户输入要打印的列表
./array.sh a
如何打印数组的元素
我已尝试执行以下操作,但无法打印
array=$1
echo ${!array[@]}
您可以使用
declare-n
作为变量的命名引用,如下所示:
a=(1 2 3)
b=(3 4 5)
declare -n arr="${1?need an array name}"
printf "%s\n" "${arr[@]}"
然后按如下方式执行:
./array.sh a
1
2
3
./array.sh b
3
4
5
将
[@]
作为间接寻址的一部分:
a=(1 2 3)
myfunction() {
array="$1[@]"
echo "${!array}"
}
myfunction a
您的bash版本是什么?GNU bash,版本4.3.11(1)-发行版(x86_64-pc-linux-GNU)
declare-n array=$1
工作正常。谢谢,我的脚本中有这么多数组。因此,set--a
在我的例子中可能不能很好地伸缩:)但是我得到了命令背后的逻辑。谢谢。@pdna这正是您如何在脚本中设置$1
,使其自包含且可运行的方法。复制粘贴和复制比创建脚本并使用某些参数运行脚本更容易。我改为通过函数设置