Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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_Associative Array - Fatal编程技术网

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]}

下面是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]}
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
相关的值。