Como inicializar um array associativo global, somente leitura no Bash?

3

Eu executo o seguinte código na versão Bash "GNU bash, Versão 4.2.39 (1) -release (x86_64-redhat-linux-gnu)":

function foobar {
  declare -rgA FOOBAR=([foo]=bar)
}
foobar
declare -p FOOBAR
# Output: declare -Ar FOOBAR='()'

Por que o Bash não inicializa FOOBAR com ([foo]=bar) de acordo com declare -p ? A mesma declaração funciona fora de uma função, por exemplo,

declare -rgA FOOBAR=([foo]=bar)
declare -p FOOBAR
# Output: declare -Ar FOOBAR='([foo]="bar" )'

Da mesma forma, o código a seguir, mas sem FOOBAR , é somente leitura:

function foobar {
  declare -gA FOOBAR
  FOOBAR=([foo]=bar)
}
foobar
declare -p FOOBAR
# Output: declare -A FOOBAR='([foo]="bar" )'

Isso é um bug ou um recurso?

    
por Tim Friske 26.11.2012 / 22:10

1 resposta

2

function foobar {
  declare -rgA 'FOOBAR=([foo]=bar)'
}
foobar
declare -p FOOBAR

(observe as aspas extras) funciona para mim.

Você até encontrará isso em:

function foobar {
  var="something tricker"
  declare -rgA 'FOOBAR=([foo]=$var)'
}
foobar
declare -p FOOBAR

$ var é expandido, mesmo que seja citado.

    
por 26.11.2012 / 22:34

Tags