Szukam poprawnej składni instrukcji switch z przypadkowymi przypadkami w języku Bash (najlepiej bez rozróżniania wielkości liter). W PHP programowałbym to tak:
switch($c) {
case 1:
do_this();
break;
case 2:
case 3:
do_what_you_are_supposed_to_do();
break;
default:
do_nothing();
}
Chcę to samo w Bash:
case "$C" in
"1")
do_this()
;;
"2")
"3")
do_what_you_are_supposed_to_do()
;;
*)
do_nothing();
;;
esac
To jakoś nie działa: funkcja do_what_you_are_supposed_to_do()
powinna zostać uruchomiona, gdy $ C wynosi 2 LUB 3.
bash
switch-statement
Mischka
źródło
źródło
function fname { echo "Inside fname"; return 0; }
lubfname() { echo "inside fname"; return 0; }
umieszczenia parens w wywołaniu funkcji, może to wyglądać na definicję funkcji. Funkcje powinny być nazywane jak każdy inny program wiersza poleceń, takich jakmv
,cp
,rsync
,ls
,cd
, etc ... W tym przypadku nazywamy fname tak:fname $ARGS
.do_nothing()
będzie oświadczenie SKIP? Zastosowanie:
.Odpowiedzi:
Użyj pionowego paska (
|
) dla „lub”.źródło
[23])
do_what_you_are_supposed_to_do()
, zwijanie zarówno „2”, jak i „3” w jedną sprawę nie rozwiązuje tego problemu. Nie jestem pewien, czy edytowanie pytania w celu wyjaśnienia jest uzasadnione, ponieważ oczywiste jest, że wiele osób uznało tę odpowiedź za pomocną.break
w kodzie PHP.) Montaż na pytanie, czy jego tytuł, w tym dniu będzie unieważnić wielu odpowiedzi, które nie przewidują spadek-poprzez logikę i chyba nie powinno być zrobione. Fall-through nie pojawił się w tytule aż do kilku edycji dokonanych przez innych użytkowników, ale jest już za późno, aby go wycofać.Najnowsze
bash
wersje pozwalają;&
na awarię, używając zamiast;;
: umożliwiają także wznowienie sprawdzania spraw przy użyciu;;&
tam.próbka wyjściowa
źródło
;&
i;;&
. Zmieniłem"24"
się;;& # resume
i dostał takie same wyniki, więc wciąż zastanawiam się, kiedy należy użyć;&
fallthrough.?4
aby[13]4
uczynić to bardziej oczywistym, i aby twoja zmiana była przełomową zmianą()
nazw funkcji za bash, chyba że chcesz je zdefiniować.[23]
w przypadku dopasowania2
lub3
''
miejsce zamiast""
Jeśli jest włączony
""
, interpreter (niepotrzebnie) próbuje rozszerzyć możliwe zmienne w wartości przed dopasowaniem.W przypadku dopasowywania bez rozróżniania wielkości liter można użyć klas znaków (takich jak
[23]
):Ale
abra
nigdy nie trafił, ponieważ będzie pasował do pierwszego przypadku.W razie potrzeby możesz pominąć
;;
w pierwszym przypadku, aby kontynuować testowanie dopasowań również w następujących przypadkach. (;;
skacze doesac
)źródło
case "${C,,}" in
jeśli sprawa nie jest ważna;;
? Nie powinieneś używać;&
do przewrotu?;;
, muszę użyć,;;&
jeśli chcę kontynuować testowanie.do_wild_mysterious_things
zrobiłem mój dzieńSpróbuj tego:
źródło
Jeśli wartości są liczbami całkowitymi, możesz użyć
[2-3]
lub możesz użyć[5,7,8]
dla wartości nieciągłych.Jeśli wartości są ciągiem, możesz użyć
|
.źródło
shift
koniec?shift
usuwa pierwszy argument z listy argumentów CLI. Zasadniczo przy każdej iteracji tej pętli zawsze$1
używa się każdego argumentu z listy argumentów CLIshift
.