Bash shell,管道后关联数组为空

Bash shell,管道后关联数组为空

Bash 4.3.30

假设您有以下代码:

#!/bin/bash

declare -A map

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

g() {
    for k in "${!map[@]}"
    do
        echo "$k --> ${map[$k]}"
    done
}

f
g

这输出

x --> a
y --> b

如果我改变上面提到的程序,f | g它就不会输出任何内容。

我认为在全局范围内声明关联数组将允许我随时随地访问其值。我读过有关管道和范围的奇怪问题,但我一直无法找到解决方案。

答案1

声明变量的位置无关紧要。f因为它在管道中,所以在单独的进程中运行,因此对它f所做的任何更改map都会被隔离到进程。这种情况下的修复很简单;f不产生任何输出,因此没有理由使用管道将其连接到g。只需运行f然后 g

f; g

相关内容