Я могу вставить больше чем 1 условие если?

[119263] Проблемы с обменом [119718]/home[119719] между несколькими неидентичными установками связаны не столько с операционной системой, сколько с программами - и особенно их версиями - установленными в каждой системе.

Если у вас в обеих системах установлено одинаковое программное обеспечение, но разные версии, вы можете столкнуться с проблемами, когда одна версия понимает свой [119720]dot-файл[119721], в то время как другая версия может вообще не понимать его, или не понимать его частично. Некоторые программы, такие как Vim, не возражают против частичного непонимания конфигурационного файла. У некоторых есть репозиторий на GitHub с [119722]конфигурационными файлами[119723] для быстрого воспроизведения домашнего каталога.[12176]В основном всё будет в порядке, но это будет подвергнуто тестированию.[12177]Настоящим киллером, однако, является то, что раздел не может быть смонтирован под каждой из систем. Если раздел найден обеими системами, это не должно быть большой проблемой. Но, возможно, вам понадобится подогнать обе системы под конкретную задачу. Во-первых, все разваливается, когда у вас разные UID для одного и того же пользователя на каждом дистрибутиве. Так что да, это возможно, и на более крупных инсталляциях (университетах, компаниях и т.д.) это [119724] делается [119725]. Однако, при работе с ним необходимо учитывать предпосылки.[12178]Некоторые люди имеют свой раздел [119726]/home[119727] на внешних дисках, некоторые монтируют их по сети, именно по этой причине. Ваша идея не так уж далека от истины, просто администратору требуется несколько часов на настройку всего, чтобы избежать проблем.[119272]
1
11.01.2015, 21:50
2 ответа

С помощью синтаксиса [ выражение] (стандарт POSIX) можно использовать следующее:

if [ "$name" != "$blank" ] && [ "$age" = "$blank" ]; then
   echo true
fi

Но в синтаксисе [[ выражение]] можно использовать оба условия:

if [[ $name != "$blank" && $age == "$blank" ]]; then
   echo true!
fi

Два преимущества [[] по сравнению с []:

  1. Для [[ не будет сделано разбиение слов или расширение глобуса, поэтому многие аргументы не нужно цитировать (за исключением правой стороны == и ! =, который интерпретируется как образец, если он не цитируется).
  2. [[] проще в использовании и менее подвержен ошибкам.

Недостаток [[[]: поддерживается только в ksh, bash и zsh, а не в обычном Bourne/POSIX sh.

Моя ссылка и хорошая страница для сравнения [[ и []: bash FAQ

Последствия забывания процитировать переменную в bash/POSIX оболочках

6
27.01.2020, 23:11

Еще одна возможность, не упомянутая в @SepahradSalour, - это использование оператора -a:

if [ "$name" != "$blank" -a "$age" = "$blank" ]; then

BTW, обязательно правильно процитируйте все переменные отдельно.

4
27.01.2020, 23:11

Теги

Похожие вопросы