【问题标题】:How to store variable value in associative array key如何将变量值存储在关联数组键中
【发布时间】:2019-11-29 10:39:56
【问题描述】:

我想知道如何将变量值存储到键中。

这样当key被访问时就会输出key + variables的值。

当我创建一个关联数组并将一个变量插入并回显键时,它会输出变量名称而不是变量值。如何让 bash 的解释器正确解析?

试过了 “${变量}” ${变量} “$变量” $变量

variable="some string"

declare -A array
array=(
['some code ${variable}']="keyvalue"
['${variable} some more code']="keyvalue2"
['and even some more code ${variable}']="keyvalue3"
)
for i in "${!array[@]}"
do
    key=$i
    value=${array[$i]}
    echo "$key : $value"
done

代码输出:

and even some more code ${variable} : keyvalue3

我正在尝试实现这个输出:

and even some more code some string : keyvalue3

【问题讨论】:

  • 单引号不能扩展变量,双引号可以。
  • 被许多人认为是邪恶的,试试eval echo "$key : $value"。如果您无法控制为${variable} 设置值的内容,这可能会很危险。祝你好运。

标签: bash variables associative-array


【解决方案1】:
#!/bin/bash


variable="some string"

declare -A array

array['foo']="keyvalue"
array['bar']="keyvalue2"
array[$variable]="keyvalue3"

for i in "${!array[@]}"
do
    key=$i
    value=${array[$i]}
    echo "$key : $value"
done

【讨论】:

  • 问题中的问题是在单引号内使用变量。
  • 是的,我需要它在键的单引号内输出变量的值。
  • @JakeLeroy 您不能在单引号内输出变量的值,因为在单引号内 $ 符号不会被解释为变量替换,而是作为文字“$”。
  • @YuriGinsburg 所以使用两个数组可能是最有效的选择?
  • @JakeLeroy 不确定为什么需要单引号。但是在您的示例中,将单引号替换为双引号将导致所需的结果。更多代码:keyvalue2 甚至更多代码:keyvalue3 一些代码:keyvalue 我认为不需要两个数组。请注意,单引号用于不替换以 $ 开头的字符串中的变量值
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-11
  • 1970-01-01
  • 1970-01-01
  • 2020-02-13
  • 2012-07-18
  • 2019-03-30
  • 2012-10-17
相关资源
最近更新 更多