Pamiętaj, że [] && cmdto nie to samo, co if .. fikonstrukcja.
Czasami jego zachowanie jest dość podobne i można go użyć [] && cmdzamiast if .. fi. Ale tylko czasami. Jeśli masz więcej niż jedno polecenie do wykonania, jeśli warunek lub musisz if .. else .. fizachować 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 lszawiedzie, echozostanie 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 [.
ifjest kompatybilny z POSIX. Więc jeśli musisz wybierać pomiędzy [i ifpatrzeć na swoje zadanie i oczekiwane zachowanie.
[ … ]porównaniu do[[ … ]]vstest …, w tym najczęściej duplikowanym pytaniu są bardziej kompletne odpowiedzi .