当我编写一个名为 array_call_self.sh 的脚本时,如下所示
#!/bin/bash
declare -A num word
word=(
[a]='index_a'
[b]='index_b'
[c]='index_c'
)
num=(
[a]=1
[b]=2
[c]=3
)
array=${$1[@]}
for i in ${$array[@]};do
echo $i
done
当我运行bash array_call_self.sh word
它时返回我
test.sh: line 13: ${$1[@]}: bad substitution
test.sh: line 14: ${$array[@]}: bad substitution
看起来您可能想要使用名称引用变量(在
bash
4.3 版或更高版本中可用):这将变量声明
var
为名称引用变量,引用脚本的第一个参数命名的变量。如果第一个参数不是变量的有效名称,或者它是 namevar
,那么您将收到错误消息。在声明
var
并为其分配变量名称后,访问其值var
就像您通常访问命名变量的值一样。请注意,在脚本的命令行上提供变量的名称是非常不可用的,您可能希望隐藏此类实现细节并将有效参数限制在有限的列表中,可能通过进行正确的命令行解析。上面的代码允许脚本用户输出任何脚本的变量。
将值限制为有限列表的简单方法: