O seguinte script falha quando executado com bash 4.4.20(1)
#!/bin/bash
bar() {
local args=("y")
}
foo() {
local -r args=("x")
bar
}
foo
com erro line 3: args: readonly variable
, mas é bem-sucedido quando executado com o bash 4.2.46(2), o que faz sentido após a leitura de 24.2. Variáveis locais .
O script a seguir com variáveis não array é executado sem problemas:
#!/bin/bash
bar() {
local args="y"
}
foo() {
local -r args="x"
bar
}
foo
Não consegui encontrar nenhuma alteração que explique a diferença entre o bash 4.2.46(2) e o bash 4.4.20(1).
P: isso é um bug no bash 4.4.20(1)? se esse é o comportamento esperado, por que o segundo script não falha?
Seu script é executado corretamente com a versão 5.1 do
bash
shell, mas não com versões intermediárias posteriores à 4.3.O bug ou bugs podem ter sido introduzidos por volta da versão 4.3 ou 4.4. Várias mudanças afetaram como as declarações e variáveis somente leitura funcionam no desenvolvimento que leva a ambos os lançamentos.
Há pelo menos duas entradas no log de alterações que podem estar relacionadas à correção dos bugs envolvidos:
bash-5.0-alpha
, o change log tem o seguinte a dizer (estou assumindo que referenciar oreadonly
builtin também significa quelocal -r
foi afetado):bash-5.1-alpha
, um bug adicional que pode estar relacionado a isso também é mencionado :Ao dividir usando o repositório Git do shell e seu script, chegamos ao bug que está sendo introduzido com
bash-4.4-rc1
, e posteriormente corrigido embash-5.1-alpha
. Uma vez que ambos são grandes commits, é difícil apontar para quaisquer mudanças específicas no código.