¿Cómo obtener un comportamiento fallido en declaraciones de casos en bash v3?

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?

¿Es su código en las primeras líneas solo una muestra o el código real que desea ejecutar?
Está listo para copiar y pegar el código para ejecutar. El script real es .bashrc en las líneas 58-59 que están comentadas porque no funcionan en OSX.

Respuestas (1)

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.

deberías usar the :para la rama vacía... el puro # ...arroja error ;)