从Bash函数返回字典

时间:2015-11-28 20:13:48

标签: bash function dictionary return

我希望在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()

2 个答案:

答案 0 :(得分:0)

要捕获命令或函数的输出,请使用命令替换:

The_Output_Dictionary=$(Dictionary_Builder)

并输出要返回的值,即将return替换为echo。但是,您无法轻松返回结构,但您可能会尝试返回声明它的字符串(参见下文)。

无需在函数中使用localunsetdeclare在函数内创建局部变量,除非-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上多余的单引号使输出带有空格的值成为可能。