Aquí hay un script de shell:Bash: Valor mínimo de la variable global
globvar=0
function myfunc {
let globvar=globvar+1
echo "myfunc: $globvar"
}
myfunc
echo "something" | myfunc
echo "Global: $globvar"
Cuando llama, se imprime el siguiente:
$ sh zzz.sh
myfunc: 1
myfunc: 2
Global: 1
$ bash zzz.sh
myfunc: 1
myfunc: 2
Global: 1
$ zsh zzz.sh
myfunc: 1
myfunc: 2
Global: 2
La pregunta es: ¿por qué sucede esto y qué comportamiento es correcto?
P. S. Tengo la extraña sensación de que la función detrás de la tubería se llama en forma de bifurcación ... Entonces, ¿puede haber una solución simple?
P.P.S. Esta función es una envoltura de prueba simple. Ejecuta la aplicación de prueba y analiza su salida. Luego incrementa las variables $ APROBADO o $ FAILADO. Finalmente, obtiene una cantidad de pruebas pasadas/fallidas en variables globales. El uso es como:
test-util << EOF | myfunc
input for test #1
EOF
test-util << EOF | myfunc
input for test #2
EOF
echo "Passed: $PASSED, failed: $FAILED"
Gracias, Serge
¿Ha leído: http://tldp.org/LDP/abs/html/localvar.html? –
bueno, en mi opinión, $ globvar no es una variable local, porque al invocar myfunc() sin un conducto, la variable global $ globvar se incrementa bastante bien. El problema es que la función de llamada sobre la tubería no funciona en bash/sh. – zserge