Зверніть увагу, [] && cmdце не те саме, що if .. fiбудівництво.
Іноді його поведінка досить схожа і [] && cmdзамість цього можна використовувати if .. fi. Але лише іноді. Якщо у вас є більше, ніж одна команда для виконання, якщо умова, або вам потрібно if .. else .. fiбути обережним і яка логіка.
Кілька прикладів:
[ -z "$VAR" ] && ls file || echo wiiii
Не те саме, що
if [ -z $VAR ] ; then
ls file
else
echo wiii
fi
тому що якщо lsне вдасться, echoбуде виконано те, чого не відбудеться if.
Інший приклад:
[ -z "$VAR" ] && ls file && echo wiii
не те саме, що
if [ -z "$VAR" ] ; then
ls file
echo $wiii
fi
хоча ця конструкція діятиме так само
[ -z "$VAR" ] && { ls file ; echo wiii ; }
будь ласка, зверніть увагу, ;коли відлуння є важливим і воно повинно бути там.
Таким чином, відновлення твердження вище ми можемо сказати
[] && cmd == якщо перша команда успішна, виконайте наступну
if .. fi == якщо умова (яка може бути і тестовою командою), тоді виконайте команди (и)
Тож для портативності між [та [[використання [лише.
ifсумісний з POSIX. Тож якщо вам доведеться вибирати між собою [і ifвибирати, дивлячись на своє завдання та очікувану поведінку.
[ … ]vs[[ … ]]vstest …, то в цьому здебільшого повторюваному запитанні є більш повні відповіді .