Ich habe gerade die folgende Syntax unter Linux getestet:
case "$OSTYPE" in linux-gnu*) ;;& linux*) echo $OSTYPE; ;; esac
case "$OSTYPE" in linux-gnu*) ;& linux*) echo $OSTYPE; ;; esac
was ohne Probleme funktioniert (siehe: Kann bash case-Anweisungen kaskadieren? ) mit GNU bash, version 4.2.37(1)-release (x86_64-pc-linux-gnu)
.
Aber unter OSX habe ich die folgenden Fehler:
-bash: syntax error near unexpected token `&'
-bash: syntax error near unexpected token `;'
Es ist GNU bash, version 3.2.51(1)-release (x86_64-apple-darwin13)
.
Irgendwelche Hinweise, wie man das gleiche Fall-Through-Verhalten auf Bash v3 erreichen kann?
Aktualisieren Sie entweder Ihre Bash ( Homebrew ) oder Sie müssen sie mit einer Reihe von if-Anweisungen neu codieren:
case "$OSTYPE" in linux-gnu*) ;;& linux*) echo $OSTYPE; ;; esac
case "$OSTYPE" in linux-gnu*) ;& linux*) echo $OSTYPE; ;; esac
wäre
# 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
Ich habe im zweiten Fall eine Funktion verwendet, um die Codeduplizierung zu reduzieren, falls mehrere Anweisungen vorhanden sind.
:
Sie sollten den für den leeren Zweig
verwenden ... der reine # ...
Fehler wirft ;)
kein Hang
kenorb