Kiedy wymagane są nawiasy kwadratowe w instrukcji Bash if?
Zwykle używam nawiasów kwadratowych w wyrażeniu if:
if [ "$name" = 'Bob' ]; then ...
Ale gdy sprawdzam czygrep
się udało nie używam nawiasów kwadratowych:
if grep -q "$text" $file ; then ...
Kiedy konieczne są nawiasy kwadratowe w deklaracji if
?
3 answers
Nawiasy kwadratowe są synonimem polecenia test
. Polecenie if
sprawdza status zakończenia polecenia w celu podjęcia decyzji, którą gałąź ma przejąć. grep -q "$text"
jest poleceniem, ale "$name" = 'Bob'
nie jest-to tylko wyrażenie. test
jest poleceniem, które pobiera wyrażenie i ocenia je:
if test "$name" = 'Bob'; then ...
Ponieważ nawiasy kwadratowe są synonimem polecenia test
, możesz go przepisać jako oryginalną instrukcję:
if [ "$name" = 'Bob' ]; then ...
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-19 23:06:17
[
jest w rzeczywistości poleceniem, równoważnym (prawie, patrz poniżej) do polecenia test
. To nie jest część składni powłoki. (Zarówno [
, jak i test
, w zależności od powłoki, są często wbudowanymi poleceniami, ale to nie wpływa na ich zachowanie, może poza wydajnością.)
Instrukcja if
wykonuje polecenie i wykonuje then
część, jeśli polecenie powiedzie się, lub else
część (jeśli istnieje), jeśli zawiedzie. (Polecenie zakończy się sukcesem, jeśli zakończy się ze statusem ($?
) równym 0, nie powiedzie się, jeśli wychodzi z niezerowym statusem.)
W
if [ "$name" = 'Bob' ]; then ...
Komenda
[ "$name" = 'Bob' ]
(możesz wykonać tę samą komendę bezpośrednio, bez if
.)
W
if grep -q "$text" $file ; then ...
Komenda
grep -q "$text" $file
man [
lub man test
aby uzyskać więcej informacji.
Przypis: cóż, [
komenda jest prawie równoważna komendzie test
. Różnica polega na tym, że [
wymaga ]
jako ostatniego argumentu, a test
nie -- i w rzeczywistości nie pozwala to. (To nie musi być zaimplementowane w ten sposób, ale [
bez dopasowania ]
spowodowałoby, że wiele osób bardzo się zdenerwuje.)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-28 20:20:12
Najlepszym sposobem na myślenie o składni [ ... ]
jest uznanie [
za program - którym jest!
Zobacz:
~ $ ls /usr/bin/\[
/usr/bin/[
Z drugiej strony, prawdopodobnie nie używasz tej wersji, ponieważ bash
dostarcza również [
jako wbudowaną powłokę.
W każdym razie, aby odpowiedzieć na twoje pytanie: co robi if
, Uruchom polecenie, które podasz i zobaczysz, że zwracana wartość to 0
lub nie. Używasz [
do wykonywania innych, ciekawszych porównań, takich jak porównania łańcuchów. Zobacz też man [
i man bash
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-19 22:07:37