por que o eval não declara em um trabalho de função no bash?

0

Rastreando comportamentos estranhos, um script bash resultou no seguinte MWE:

set -o errexit
set -o nounset
set -x
my_eval()
{
  eval "$1"
}
my_eval "declare -A ASSOC"
ASSOC[foo]=bar
echo success

falha com: line 9: foo: unbound variable . No entanto, funciona se eval for usado no lugar de my_eval (e, obviamente, se o declare for feito diretamente, sem qualquer indireção).

Por que eval uma declaração declare em uma função não funciona da mesma maneira que fazer fora de uma função?

Estou usando GNU bash, version 4.3.46(1)-release (x86_64-pc-linux-gnu) , da popular distribuição Ubuntu de Linux .

    
por DepressedDaniel 17.11.2016 / 03:25

1 resposta

4

Uma olhada nas páginas man nos diz:

The -g option forces variables to be created or modified at the
global scope, even when **declare** is executed in a shell function.

Assim, se o seu script disser:

my_eval "declare -gA ASSOC"

você / você seria mais feliz.

O ponto é que a instrução "declare" vê seu escopo no local em que é executada / avaliada e não no local onde está escrita.

    
por 17.11.2016 / 04:46