bash - 关联数组默认是局部的

标签 bash scope

关联数组在函数体内声明时似乎默认是局部的,而它们应该是全局的。以下代码

#!/bin/bash

f() {
    declare -A map
    map[x]=a
    map[y]=b
}

f
echo x: ${map[x]} y: ${map[y]}

产生输出:

x:  y:

此时

#!/bin/bash

declare -A map

f() {
    map[x]=a
    map[y]=b
}

f
echo x: ${map[x]} y: ${map[y]}

产生输出:

x: a y: b

是否可以在函数中声明全局关联数组? 或者可以使用什么解决方法?

最佳答案

From: Greg Wooledge
Sent: Tue, 23 Aug 2011 06:53:27 -0700
Subject: Re: YAQAGV (Yet Another Question About Global Variables)

bash 4.2 adds "declare -g" to create global variables from within a function.

谢谢格雷格!然而 Debian Squeeze 仍然有 Bash 4.1.5

关于bash - 关联数组默认是局部的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10806357/

相关文章:

JavaScript 范围问题/错误

ruby - 作用域和 block

bash - $BASH_VERSION 在 macOS 上报告旧版本的 bash,这是一个应该修复的问题吗?

git - 检查 authorized_keys 以查看哪个 key 用于推送提交

bash: 变量名后面直接跟其他参数?

用于监视进程和发送邮件(如果失败)的 Bash 脚本

bash - 重新排列文件中的数据(不是直接转置)

javascript - window.name在IE中的作用范围是什么?

javascript - 如何在 JavaScript 中不使用 `window` 检查动态全局变量?

php - 类声明的范围