Come ottenere un comportamento fall-through nelle istruzioni case in bash v3?

1

Ho appena testato la seguente sintassi su Linux:

case "$OSTYPE" in linux-gnu*) ;;& linux*) echo $OSTYPE; ;; esac
case "$OSTYPE" in linux-gnu*) ;& linux*) echo $OSTYPE; ;; esac

che funziona senza problemi (vedi: Può bash cascate le dichiarazioni dei casi? ) con GNU bash, version 4.2.37(1)-release (x86_64-pc-linux-gnu) .

Ma su OSX ho i seguenti errori:

-bash: syntax error near unexpected token '&'
-bash: syntax error near unexpected token ';'

È GNU bash, version 3.2.51(1)-release (x86_64-apple-darwin13) .

Qualsiasi indizio su come ottenere lo stesso comportamento fall-through su bash v3?

    
posta kenorb 12.08.2014 - 12:27
fonte

1 risposta

3

Aggiorna il tuo bash ( homebrew ) o dovrai ricodificarlo utilizzando una serie di istruzioni if:

case "$OSTYPE" in linux-gnu*) ;;& linux*) echo $OSTYPE; ;; esac
case "$OSTYPE" in linux-gnu*) ;& linux*) echo $OSTYPE; ;; esac

sarebbe

# 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

Ho usato una funzione nel 2 ° caso per ridurre la duplicazione del codice, nel caso ci siano più istruzioni.

    
risposta data 12.08.2014 - 14:00
fonte

Leggi altre domande sui tag