Pamiętaj, że [] && cmd
to nie to samo, co if .. fi
konstrukcja.
Czasami jego zachowanie jest dość podobne i można go użyć [] && cmd
zamiast if .. fi
. Ale tylko czasami. Jeśli masz więcej niż jedno polecenie do wykonania, jeśli warunek lub musisz if .. else .. fi
zachować ostrożność i sprawdzić logikę.
Kilka przykładów:
[ -z "$VAR" ] && ls file || echo wiiii
To nie to samo co
if [ -z $VAR ] ; then
ls file
else
echo wiii
fi
ponieważ jeśli ls
zawiedzie, echo
zostanie wykonane, co się nie stanie if
.
Inny przykład:
[ -z "$VAR" ] && ls file && echo wiii
to nie to samo co
if [ -z "$VAR" ] ; then
ls file
echo $wiii
fi
chociaż ta konstrukcja będzie działać tak samo
[ -z "$VAR" ] && { ls file ; echo wiii ; }
Uwaga: ;
echo jest ważne i musi tam być.
Wracając do powyższego stwierdzenia, możemy powiedzieć
[] && cmd
== jeśli pierwsze polecenie zakończy się powodzeniem, wykonaj następne
if .. fi
== jeśli warunek (który może być również poleceniem testowym), wówczas wykonaj polecenia
Więc dla przenośności pomiędzy [
i tylko do [[
użytku [
.
if
jest kompatybilny z POSIX. Więc jeśli musisz wybierać pomiędzy [
i if
patrzeć na swoje zadanie i oczekiwane zachowanie.
[ … ]
porównaniu do[[ … ]]
vstest …
, w tym najczęściej duplikowanym pytaniu są bardziej kompletne odpowiedzi .