从 Bash 函数返回字典

2024-03-12

我想在 bash 中有一个函数,它创建一个字典作为局部变量。用一个元素填充字典,然后返回该字典作为输出。

下面的代码正确吗?

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()

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

The_Output_Dictionary=$(Dictionary_Builder)

并输出要返回的值,即替换return with echo。不过,您不能轻易返回一个结构,但您可以尝试返回一个声明它的字符串(见下文)。

没有必要使用local and 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 Bash 函数返回字典 的相关文章

随机推荐