首页 > 解决方案 > 如何在 bash 函数中使用对关联数组的 ba​​sh 变量引用而不在调用该函数之前声明它?

问题描述

有多种方法可以从 bash 脚本中的函数获取结果,一种是使用引用变量,例如local -n out_ref="$1,这也是我的首选方式。

我的 bash 版本是:

GNU bash, Version 5.0.3(1)-release 

最近,我的一个 bash 函数需要生成一个关联数组,就像在这个示例代码中一样:

#!/bin/bash

testFunction() {
    local -n out_ref="$1"

    out_ref[name]="Fry"
    out_ref[company]="Planet Express"
}

declare -A employee
testFunction employee

echo -e "employee[name]: ${employee[name]}"
echo -e "employee[company]: ${employee[company]}"

我将变量声明employee为关联数组,带有declare -A.

输出是:

employee[name]: Fry
employee[company]: Planet Express

如果我删除该行declare -A employee,则输出为:

employee[name]: Planet Express
employee[company]: Planet Express

有没有办法将关联数组的声明移动到函数中,所以该函数的用户不需要事先这样做?

标签: arraysbashpass-by-referenceassociative-array

解决方案


在函数内部使用declare -Ag "$1",以便将employee 声明为全局变量。


推荐阅读