1 votes

Comment obtenir un comportement fall-through dans les instructions case en bash v3 ?

Je viens de tester la syntaxe suivante sous Linux :

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

qui fonctionne sans aucun problème (voir : Les déclarations de cas de bash peuvent-elles cascader ? ) avec GNU bash, version 4.2.37(1)-release (x86_64-pc-linux-gnu) .

Mais sous OSX, j'ai les erreurs suivantes :

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

C'est GNU bash, version 3.2.51(1)-release (x86_64-apple-darwin13) .

Avez-vous une idée de la manière dont on peut obtenir le même comportement de repli sur bash v3 ?

3voto

glenn jackman Points 1869

Soit vous mettez à jour votre bash ( homebrew ) ou vous devrez le recoder en utilisant une série d'instructions if :

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

serait

# 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

J'ai utilisé une fonction dans le deuxième cas pour réduire la duplication du code, au cas où il y aurait plusieurs déclarations.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X