Mam skrypt powłoki, który zawiera następujące elementy:
case $1 in
0 )
echo $1 = 0;
OUTPUT=3;;
1 )
echo $1 = 1;
OUTPUT=4;;
2 )
echo $1 = 2;
OUTPUT=4;;
esac
HID=$2;
BUNCH=16;
LR=.008;
Czy w powyższym fragmencie średniki są całkowicie zbędne? Czy jest jakiś powód, dla którego niektórzy ludzie używają podwójnych średników?
Wygląda na to, że średniki są tylko separatorem, czymś, czego użyłbyś zamiast nowego wiersza.
Według
man bash
:Zatem
;
może być metaznakiem lub operatorem sterującym, podczas gdy;;
zawsze jest operatorem sterującym (w przypadku polecenia).W twoim konkretnym kodzie wszystko
;
na końcu linii nie jest potrzebne. Jest;;
to jednak potrzebne.źródło
;
i;;
? Nie jestem wystarczająco zaznajomiony z analizowaniem składni BASH, aby poznać praktyczną różnicę między tym, co BASH nazywa „metaznakiem”, a tym, co nazywa „operatorem sterującym”.W specjalnym przypadku find,
;
służy do kończenia poleceń wywoływanych przez -exec. Zobacz odpowiedź @kenorb na to pytanie .źródło
@ Opensourcebook-Amit
znaki nowej linii są odpowiednikiem pojedynczego średnika
;
na terminalu lub w skrypcie powłoki.Zobacz poniższe przykłady:
Na terminalu:
W skrypcie powłoki:
Ale nie zgadzam się z komentarzem, który
&
jest odpowiednikiem nowej linii lub pojedynczego średnika&
uruchamia polecenia w tle również jako separator poleceń, ale nie działa jako średnik lub znak nowej linii.źródło
@Ignacio Vazquez-Abrams
W rzeczywistości nie jest to całkowicie dokładne, pojedyncze średniki na końcu wiersza nie są zbędne i zdecydowanie nie są tym samym, co nowe wiersze.
Z podręcznika Bash Reference Manual
Polecenia oddzielone „nową linią” mogą być wykonywane równolegle, gdy polecenia oddzielone średnikiem są zawsze wykonywane sekwencyjnie
źródło
A sequence of one or more newlines may appear in a list to delimit commands, equivalent to a semicolon.
Więc to, co zacytowałeś o średniku, odnosi się w równym stopniu do nowych linii.&
nie\n
. W komentarzu jest napisane, że może pominąć średnik, ponieważ najwyraźniej&
jest również separatorem poleceń, podobnie jak;
i\n
.