Nawiasy kwadratowe to skrócona notacja służąca do wykonywania testu warunkowego. Nawiasy [
, a także [[
to rzeczywiste polecenia w systemie Unix, wierz lub nie.
Pomyśl:
$ [ -f /etc/rc.local ] && echo "real file" real file -and- $ test -f /etc/rc.local && echo "real file" real file
W Bash [
jest zarówno poleceniem wbudowanym, jak i plikiem wykonywalnym. [[
to tylko słowo kluczowe dla Bash.
Przykład
Możesz to potwierdzić za pomocą type
:
$ type -a [ [ is a shell builtin [ is /usr/bin/[ $ type -a [[ [[ is a shell keyword
Tutaj możesz zobaczyć fizyczny plik wykonywalny:
$ ls -l /usr/bin/[ -rwxr-xr-x 1 root root 37000 Nov 3 2010 /usr/bin/[
builtins vs . słowa kluczowe
Jeśli spojrzysz na stronę podręcznika Bash, man bash
, „znajdziesz następujące definicje 2:
-
słowa kluczowe – Słowa zastrzeżone to słowa, które mają specjalne znaczenie dla powłoki. Następujące słowa to rozpoznawany jako zarezerwowany, gdy nie jest cytowany i albo jest pierwszym słowem prostego polecenia (zobacz poniżej GRAMATURA POWŁOKI), albo trzecim słowem przypadku lub polecenia:
! case do done elif else esac fi for function if in select then until while { } time [[ ]]
-
builtins – Jeśli nazwa polecenia nie zawiera ukośników, powłoka próbuje je zlokalizować. istnieje funkcja powłoki o tej nazwie, ta funkcja jest wywoływana w sposób opisany powyżej w F UNKCJE. Jeśli nazwa nie pasuje do funkcji, powłoka szuka jej na liście poleceń wbudowanych powłoki. Jeśli zostanie znalezione dopasowanie, wywoływana jest ta funkcja wbudowana.
Jeśli nazwa nie jest funkcją powłoki ani funkcją wbudowaną i nie zawiera ukośników, bash przeszukuje każdy element PATH w poszukiwaniu katalogu zawierającego plik wykonywalny, to imię. Bash używa tablicy haszującej do zapamiętywania pełnych ścieżek plików wykonywalnych (zobacz hash poniżej WBUDOWANE POLECENIA POWŁOKI). Pełne przeszukiwanie katalogów w PATH jest wykonywane tylko wtedy, gdy polecenie nie zostało znalezione w tablicy hash. Jeśli wyszukiwanie zakończy się niepowodzeniem, powłoka szuka zdefiniowanej funkcji powłoki o nazwie command_not_found_handle. Jeśli ta funkcja istnieje, jest wywoływana z oryginalnym poleceniem i argumentami pierwotnego polecenia jako argumentami, a kod zakończenia funkcji staje się kodem zakończenia powłoki. Jeśli ta funkcja nie jest zdefiniowana, powłoka wyświetla komunikat o błędzie i zwraca kod zakończenia równy 127.
strona podręcznika
Jeśli przejrzysz Bash man page „znajdziesz szczegółowe informacje na ten temat.
test expr [ expr ] Return a status of 0 or 1 depending on the evaluation of the conditional expression expr. Each operator and operand must be a separate argument. Expressions are composed of the primaries described above under CONDITIONAL EXPRESSIONS. test does not accept any options, nor does it accept and ignore an argument of -- as signifying the end of options.
Na koniec ze strony man:
test and [ evaluate conditional expressions using a set of rules based on the number of arguments.
EDIT # 1
Pytanie uzupełniające z OP.
OK, więc dlaczego jest Potrzebujesz więc „jeśli”? To znaczy, dlaczego „jeśli” istnieje nawet, jeśli „[” byłoby wystarczające.
if
jest częścią warunku. Polecenie test
lub [ ... ]
po prostu ocenia warunek i zwraca 0 lub a 1. Na 0 lub 1 oddziałuje instrukcja if. 2 działają razem, gdy ich używasz.
Przykład
if [ ... ]; then ... do this ... else ... do that ... fi
Komentarze
Ooohh, jeden z moich ulubionych tematów !!
Nawiasy kwadratowe są synonimem polecenia „test”. Jeśli przeczytasz testową stronę podręcznika, „zobaczysz, że możesz wywołać polecenie testowe jako
test -r /etc/profile.d/java.sh
lub
[ -r /etc/profile.d/java.sh ]
Spacje między nawiasami i zawartość wewnątrz i na zewnątrz są wymagane.
Polecenie„ test ”w tym przypadku sprawdza, czy plik / etc / profile.d / java.sh jest czytelny dla bieżącego użytkownika. Domniemane jest oczywiście sprawdzenie, czy istnieje. 🙂
&&
jest skrótem do składni basha „jeśli polecenie po lewej powiedzie się, wykonaj polecenie po prawej stronie. Więc to polecenie złożone jest skrótem dla „jeśli-to”, które wyglądałoby tak:
if test -r /etc/profile.d/java.sh then /etc/profile.d/java.sh fi
Teraz „znajdziesz również podwójne nawiasy kwadratowe wyjaśnione na stronie podręcznika bash. To jest wewnętrzna wersja basha rozszerzonej funkcji testującej. Należy pamiętać, że to nie jest dokładnie to samo. Są rzeczy, które możesz zrobić z tymi, których nie możesz zrobić za pomocą polecenia „test” i jego ” [„synonim.
Komentarze