Średnik w strukturach warunkowych

35

Po co umieszczać średniki w jednym, a nie w drugim?

Wynik jest taki sam

Kod pierwszy

if [ "a" == "a" ]
then
 echo "true"
fi

Kod drugi

if [ "a" == "a" ];
then
 echo "true";
fi

Średniki w drugim kodzie są niepotrzebne?

Kiedy konieczne jest umieszczenie średników?

Jhonathan
źródło
2
Na to pytanie udzielono wystarczającej i właściwej odpowiedzi, ale chciałem, aby PO również to wiedział; po prostu zastępuje dowolny koniec linii, dzięki czemu można połączyć dwa polecenia w jedną linię, np .:svn up; make
Aaron D. Marasco
1
Należy również zauważyć, że dwa średniki ;;są używane do oddzielania dopasowań w instrukcjach przypadków. ;;jest wymagane tutaj, nie opcjonalne ... ale ;;to nie to samo co ;lub ; ;, po prostu wygląda trochę podobnie. Pojedyncze średniki ;działają normalnie w POLECENIACH części instrukcji przypadku.
cas

Odpowiedzi:

31

Średnik jest potrzebny tylko wtedy, gdy brakuje końca linii:

if [ "a" == "a" ] ; then echo "true" ; fi

Bez średników pojawia się błąd składniowy.

Nie rozumiem twojego pytania dotyczącego cytatów. Czy mógłbyś to sprecyzować?

(Nawiasem mówiąc, używanie =zamiast zamiast ==jest bardziej przenośne i zgodne z POSIX).

choroba
źródło
Cytaty w drugim kodzie są niepotrzebne?
Jhonathan
2
Wszystkie cytaty z obu próbek są niepotrzebne.
choroba
6

Średnik jest często używany, ponieważ niektórzy ludzie (/ ja np.) Lubią taki styl:

if [ ... ]; then
   doit-it-then
else
   doit-it-else
fi

Tak więc, jeśli słowo kluczowe then zostanie umieszczone w linii warunku, jest to konieczne, ponieważ rozpoczyna się nowe polecenie, zapisane przez chorobę.

Jeśli chodzi o cudzysłowy w sprawdzaniu warunków, są one często używane ze zmiennymi, aby upewnić się, że nie wystąpi wyjątek, jeśli zmienna nie zostanie przypisana. Jest to bezpieczniejszy styl i wygląda niepotrzebnie, ale nawet w programowaniu powłoki od czasu do czasu sprawiał, że programy przetwarzały zawartość, chociaż zawartość nie mogła być przypisana do zmiennych. Następnie polecenie nadal działa, ponieważ porównywany jest pusty ciąg.

Wilk
źródło