Bash - 在关联数组中添加变量 - 替换错误
Bash - Add variable in associative array - bad substitution
这是 bash
中关联数组的预期行为
$ declare -A PC=( [Monitor]=Dell [CPU]=HP )
$ echo ${PC[CPU]}
HP
这给我 HP 作为输出
假设我有这些 PC、Monitor 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
这是 bash
中关联数组的预期行为$ declare -A PC=( [Monitor]=Dell [CPU]=HP )
$ echo ${PC[CPU]}
HP
这给我 HP 作为输出
假设我有这些 PC、Monitor 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