我希望在bash中有一个函数,它将Dictionary创建为局部变量。使用一个元素填充Dictionary,然后将此字典作为输出返回。
以下代码是否正确?
function Dictionary_Builder ()
{
local The_Dictionary
unset The_Dictionary
declare -A The_Dictionary
The_Dictionary+=(["A_Key"]="A_Word")
return $The_Dictionary
}
如何访问上述功能的输出?我可以在bash中使用以下命令吗?
The_Output_Dictionary=Dictionary_Builder()
答案 0 :(得分:0)
要捕获命令或函数的输出,请使用命令替换:
The_Output_Dictionary=$(Dictionary_Builder)
并输出要返回的值,即将return
替换为echo
。但是,您无法轻松返回结构,但您可能会尝试返回声明它的字符串(参见下文)。
无需在函数中使用local
和unset
。 declare
在函数内创建局部变量,除非-g
另有说明。新创建的变量始终为空。
要将单个元素添加到空变量,您可以直接指定它,不需要+
:
The_Dictionary=([A_Key]=A_Word)
换句话说
#!/bin/bash
Dictionary_Builder () {
declare -A The_Dictionary=([A_Key]=A_Word)
echo "([${!The_Dictionary[@]}]=${The_Dictionary[@]})"
}
declare -A The_Output_Dictionary="$(Dictionary_Builder)"
echo key: ${!The_Output_Dictionary[@]}
echo value: ${The_Output_Dictionary[@]}
对于多个键和值,您需要遍历字典:
Dictionary_Builder () {
declare -A The_Dictionary=([A_Key]=A_Word
[Second]=Third)
echo '('
for key in "${!The_Dictionary[@]}" ; do
echo "[$key]=${The_Dictionary[$key]}"
done
echo ')'
}
declare -A The_Output_Dictionary="$(Dictionary_Builder)"
for key in "${!The_Output_Dictionary[@]}" ; do
echo key: $key, value: ${The_Output_Dictionary[$key]}
done
答案 1 :(得分:0)
@choroba的答案就是我想要的。但是,我的字典值中也有空格,并且上面的答案无法正常工作。起作用的是上述答案的细微变化。
#!/bin/bash
function Dictionary_Builder() {
declare -A dict=(['title']="Title of the song"
['artist']="Artist of the song"
['album']="Album of the song"
)
echo '('
for key in "${!dict[@]}" ; do
echo "['$key']='${dict[$key]}'"
done
echo ')'
}
declare -A Output_Dictionary="$(Dictionary_Builder)"
for key in "${!Output_Dictionary[@]}" ; do
echo "${key}: '"${Output_Dictionary[$key]}"'"
done
请注意第二行echo
上多余的单引号使输出带有空格的值成为可能。