Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
bash中数组的双重替换_Bash - Fatal编程技术网

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
,使其自包含且可运行的方法。复制粘贴和复制比创建脚本并使用某些参数运行脚本更容易。我改为通过函数设置