Acabo de probar la siguiente sintaxis en Linux:
case "$OSTYPE" in linux-gnu*) ;;& linux*) echo $OSTYPE; ;; esac
case "$OSTYPE" in linux-gnu*) ;& linux*) echo $OSTYPE; ;; esac
que funciona sin problemas (Ver: ¿Pueden las sentencias bash case en cascada? ) con GNU bash, version 4.2.37(1)-release (x86_64-pc-linux-gnu)
.
Pero en OSX tengo los siguientes errores:
-bash: syntax error near unexpected token `&'
-bash: syntax error near unexpected token `;'
es GNU bash, version 3.2.51(1)-release (x86_64-apple-darwin13)
_
¿Alguna pista sobre cómo lograr el mismo comportamiento fallido en bash v3?
Actualice su bash ( homebrew ) o tendrá que recodificarlo usando una serie de declaraciones if:
case "$OSTYPE" in linux-gnu*) ;;& linux*) echo $OSTYPE; ;; esac
case "$OSTYPE" in linux-gnu*) ;& linux*) echo $OSTYPE; ;; esac
sería
# first case
if [[ $OSTYPE == linux-gnu* ]]; then
: # nothing in this branch
fi
if [[ $OSTYPE == linux* ]]; then
echo $OSTYPE
fi
# second case
function print_ostype { echo $OSTYPE; }
if [[ $OSTYPE == linux-gnu* ]]; then
# nothing in this branch
# include the next branch
print_ostype
elif [[ $OSTYPE == linux* ]]; then
print_ostype
fi
Usé una función en el segundo caso para reducir la duplicación de código, en caso de que haya varias declaraciones.
:
para la rama vacía... el puro # ...
arroja error ;)
sin ladera
kenorb