Bash-在关联数组中添加变量-替换错误
下面是bash中关联数组的预期行为Bash-在关联数组中添加变量-替换错误,bash,associative-array,Bash,Associative Array,下面是bash中关联数组的预期行为 $ declare -A PC=( [Monitor]=Dell [CPU]=HP ) $ echo ${PC[CPU]} HP 这将为我提供HP作为输出 假设我有这些PC,监视器amd CPU值存储在变量a,b和c中。我现在正在尝试获取详细信息,但尝试获取时出现“错误替换”错误 $ a=PC; b=Dell; c=HP $ echo ${$a[$b]} bash: ${$a[$b]}: bad substitution $ echo ${PC[$b]}
$ declare -A PC=( [Monitor]=Dell [CPU]=HP )
$ echo ${PC[CPU]}
HP
这将为我提供HP作为输出
假设我有这些PC,监视器amd CPU值存储在变量a,b和c中。我现在正在尝试获取详细信息,但尝试获取时出现“错误替换”错误
$ a=PC; b=Dell; c=HP
$ echo ${$a[$b]}
bash: ${$a[$b]}: bad substitution
$ echo ${PC[$b]}
Dell
${PC[$b]}但是返回的是预期的输出,而不是{$a[$b]}
不知道如何才能做到这一点。提前感谢。您正在尝试的是所谓的间接寻址-使用一个变量作为另一个变量的名称 在bash中,使用语法
${!var}
对普通变量执行此操作,如中所示
a=5
b=a
echo ${!b} # 5
不幸的是,对于数组变量,这种方法不起作用,因为语法${!array[*]}
表示其他含义(从关联数组获取所有键)
相反,正如下面的注释所建议的,您可以为整个引用创建一个字符串,然后在该引用上使用重定向:
lookup="$a[$b]"
echo ${!lookup} # will give Dell in your example
间接寻址确实适用于数组;您只需要构造一个由数组名和索引组成的适当值。例如,
t=“PC[监视器]”;echo“${!t}”
将输出Dell
。假设a=PC
和b=Monitor
,t=“$a[$b]”
也可以工作。除了语法之外,无论Dell
还是HP
都不是关联数组中的键;它们分别是与键监视器
和CPU
相关的值。