Bash Manual mówi:
Gdy używany jest [formularz, ostatnim argumentem polecenia musi być a].
$ type [
[ is a shell builtin
$ type ]
bash: type: ]: not found
Nie ]
jest to więc słowo zastrzeżone, ani operator, ani wbudowane polecenie.
Jako token, jaki jest identyfikator tokena ]
? SŁOWO czy NAZWA?
[
jest (także) samowystarczalną komendą: -rwxr-xr-x 1 root root 39552 Dec 3 18:14 / usr / bin / [Chociaż jest to możliwe, istnieje również wbudowane „równoległe”, tak jak w przypadku na przykładkill
. W niektórych systemachtest
polecenie jest dowiązaniem symbolicznym[
lub odwrotnie. AFAIK,]
samo w sobie nic nie znaczy, ale przyjmuje się, że „zamyka” a[
- ale bardziej z „estetycznego” powodu.[
jest (także) samodzielnym poleceniem, zwykle ma stronę man ... Więc spróbujman [
i / lubman test
([
itest
może to być to samo polecenie).]
pojedyncze lub podwójne cudzysłowy, a zobaczysz, że to nie ma znaczenia; to tylko struna.Odpowiedzi:
]
uzupełnia[
, jest to zamykający znak[
polecenia.Jak
man
wskazuje strona, jest to w rzeczywistości argument[
, ale[
traktuje się go szczególnie jako zakończenie.Możesz to przypominać za pomocą innych wzorców zamykania poleceń, na przykład
;
wfind .. exec
.źródło
]
?]
nie różni się niczym od innych normalnych znaków w tym kontekście (jako argument polecenia). Żetest
traktuje ją specjalnie, ale to się do komend.[
powoduje błąd, jeśli jego końcowy argument nie jest dokładnie równy]
.Bash nie traktuje znaków
[
lub]
(samych) inaczej niż litery alfabetu.W tym przypadku bash widzi „słowo”
[
i szuka polecenia o tej nazwie. Jeśli spojrzysz na swój system plików, prawdopodobnie zauważysz, że/bin/[
(lub/usr/bin/[
) istnieje jako plik wykonywalny. Tak się składa, że bash zapewnia również wbudowaną wersję (ze względu na wydajność), ale to tylko szczegół implementacji.[
Polecenia (jak w plik wykonywalny o takiej nazwie), ma zasadę, że ostatni parametr przekazać do należy]
albo zgłasza błąd. Może to częściowo wynikać z tego, że jest estetyczny, ale służy również do ochrony przed przypadkowo obciętymi poleceniami, co jest miłe.Fakt, że nie są one wyjątkowe, powoduje, że nie można pominąć białej przestrzeni przed i po
[
lub]
.Wyjątki :
[
i]
występują we właściwym formacie w tym samym słowie, np.[a-z]
Wtedy jest to specjalne i obowiązują zasady globowania bash.[[
Komenda jest wyjątkowy i może zrobić wiele rzeczy[
nie może (i parametry wewnątrz[[ .. ]]
są przetwarzane w inny sposób, jak są jakieś podziały wiersza). Odpowiednie]]
jest również specjalne, ponieważ jest słowem zastrzeżonym w powłoce, które nie może być nazwą polecenia, i kończy specjalne przetwarzanie następujące po[[
słowie kluczowym.źródło
;
lub>
, po prostu wbudowanym poleceniemcd
. W szczególności, jeśli wpiszesz[x
,[
nie ma specjalnego znaczenia.[
to polecenie specjalne , nie jest to znak specjalny .]]
jest bardziej wyjątkowy niż]
. Podczas używania[
i]
są to tylko słowa. Jeśli pominiesz]
lub zastąpisz je innym słowem, bash nadal będzie działał[
, ale[
spowoduje błąd. Jednak[[
i]]
są traktowane specjalnie na czas parsowania. Jeśli zastąpiłeś]]
coś innego, bash zgłosi błąd składniowy. A jeśli pominiesz,]]
bash będzie parsował następną linię w poszukiwaniu]]
.Mówiąc prościej niż dwie poprzednie odpowiedzi,
]
jest to tylko ciąg, który[
wymaga uruchomienia.źródło