bash - script - ¿Por qué "local" barre el código de retorno de un comando?
in bash (2)
Este fragmento de Bash funciona como esperaba:
$ fun1() { x=$(false); echo "exit code: $?"; }
$ fun1
exit code: 1
Pero este, usando local
, no:
$ fun2() { local x=$(false); echo "exit code: $?"; }
$ fun2
exit code: 0
¿Alguien puede explicar por qué el local
barre el código de retorno del comando?
El código de retorno del comando local
oscurece el código de retorno de false
La razón por la cual el código con retornos local
0 es porque $?
"Se expande al estado de salida de la tubería de primer plano ejecutada más recientemente". Por lo tanto $?
está regresando el éxito del local
Puede corregir este comportamiento separando la declaración de x
de la inicialización de x
como así:
$ fun() { local x; x=$(false); echo "exit code: $?"; }; fun
exit code: 1