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

1

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 (consulte: ¿Se pueden bloquear las declaraciones de casos 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 de caída en bash v3?

    
pregunta kenorb 12.08.2014 - 12:27

1 respuesta

3

Actualice su bash ( homebrew ) o tendrá que recodificarlo utilizando 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

Utilicé una función en el segundo caso para reducir la duplicación de código, en caso de que haya varias declaraciones.

    
respondido por el glenn jackman 12.08.2014 - 14:00

Lea otras preguntas en las etiquetas