С помощью синтаксиса [ выражение]
(стандарт POSIX) можно использовать следующее:
if [ "$name" != "$blank" ] && [ "$age" = "$blank" ]; then
echo true
fi
Но в синтаксисе [[ выражение]]
можно использовать оба условия:
if [[ $name != "$blank" && $age == "$blank" ]]; then
echo true!
fi
Два преимущества [[
] по сравнению с [
]:
[[
не будет сделано разбиение слов или расширение глобуса, поэтому многие аргументы не нужно цитировать (за исключением правой стороны ==
и ! =
, который интерпретируется как образец, если он не цитируется). [[
] проще в использовании и менее подвержен ошибкам. Недостаток [[[
]: поддерживается только в ksh, bash и zsh, а не в обычном Bourne/POSIX sh.
Моя ссылка и хорошая страница для сравнения [[
и [
]: bash FAQ
Последствия забывания процитировать переменную в bash/POSIX оболочках
Еще одна возможность, не упомянутая в @SepahradSalour, - это использование оператора -a
:
if [ "$name" != "$blank" -a "$age" = "$blank" ]; then
BTW, обязательно правильно процитируйте все переменные отдельно.