Bash shell, array associativo vazio após a canalização

0

Bash 4.3.30

Suponha que você tenha o seguinte código:

#!/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

Isso gera

x --> a
y --> b

Se eu alterar o programa mencionado acima para f | g , ele não produzirá nada.

Eu supus que declarar o array associativo no escopo global permitiria que eu acessasse seus valores a qualquer hora e em qualquer lugar que eu quisesse. Li sobre problemas estranhos com pipeline e escopo, mas não consegui descobrir uma solução.

    
por Banex 08.09.2015 / 17:40

1 resposta

2

Onde você declara a variável não importa. f é executado em um processo separado porque está em um pipeline, portanto, todas as alterações que f fizer em map serão isoladas no processo that . A correção neste caso é fácil; f não produz saída, então não há razão para usar um pipe para conectá-lo a g . Basta executar f , e g .

f; g
    
por 08.09.2015 / 17:44

Tags