Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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_Variables_Associative Array - Fatal编程技术网

Bash 如何在关联数组键中存储变量值

Bash 如何在关联数组键中存储变量值,bash,variables,associative-array,Bash,Variables,Associative Array,我想知道如何将变量值存储到键中 因此,当访问键时,它将输出键+变量值 当我创建一个关联数组并在其中插入一个变量并回显键时,它会输出变量名而不是变量值。我如何让bash的解释器正确地解析它 尝试 “${varaible}” ${variable} “$variable” $variable variable="some string" declare -A array array=( ['some code ${variable}']="keyvalue" ['${variable} some

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

因此,当访问键时,它将输出键+变量值

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

尝试 “${varaible}” ${variable} “$variable” $variable

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}
的值设置,则可能会很危险。祝你好运。单引号不能扩展变量,双引号可以。许多人认为这是邪恶的,请尝试
eval echo“$key:$value”
。如果您无法控制
${variable}
的值设置,则可能会很危险。祝你好运。问题是单引号中变量的使用,尽管如此。是的,我需要它在键的单引号内输出变量的值。@JakeLeroy您不能在单引号内输出变量的值,因为在单引号内,$符号不被解释为变量替换,而是被解释为文字“$”。@YuriGinsburg所以使用两个数组可能是最有效的选择?@JakeLeroy不是当然,你为什么需要单引号。但在您的示例中,将单引号替换为双引号将导致所需的结果。更多的代码:keyvalue2,甚至更多的代码:keyvalue3一些代码:keyvalue3我认为没有必要有两个数组。请注意,单引号用于不替换以$开头的字符串中的变量值问题中的问题是单引号中变量的使用,尽管如此。是的,我需要它在键的单引号内输出变量的值。@JakeLeroy您不能在单引号内输出变量的值,因为在单引号内,$符号不被解释为变量替换,而是被解释为文字“$”。@YuriGinsburg所以使用两个数组可能是最有效的选择?@JakeLeroy不是当然,你为什么需要单引号。但在您的示例中,将单引号替换为双引号将导致所需的结果。更多的代码:keyvalue2,甚至更多的代码:keyvalue3一些代码:keyvalue3我认为没有必要有两个数组。请注意,单引号用于表示不替换以开头的字符串中的变量值$
#!/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