Выбор ответа Middle Bash-скрипты обновлено

[[ ]] и [ ]

Вопрос

Чем [[ $a == prod* ]] отличается от [ $a == prod* ]?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: В [[ ]] справа маска, а $a не разбивается; в [ ] маска раскроется в имена файлов. [[ ]] это ключевое слово bash: внутри нет разбиения слов и раскрытия масок по файлам, == с маской справа сравнивает по шаблону, есть = для регулярок и &&. [ ] это команда test, её аргументы готовит shell, поэтому prod может раскрыться в…

Варианты ответа

  1. В [[ ]] справа маска, а $a не разбивается; в [ ] маска раскроется в имена файловправильный ответ
  2. Ничем, это синонимы: [[ ]] просто более новая запись той же встроенной команды test
  3. [ ] быстрее и поддерживает регулярные выражения через =~, а [[ ]] нет
  4. [[ ]] работает только в zsh, в bash это синтаксическая ошибка при запуске

Разбор

[[ ]] это ключевое слово bash: внутри нет разбиения слов и раскрытия масок по файлам, == с маской справа сравнивает по шаблону, есть =~ для регулярок и &&. [ ] это команда test, её аргументы готовит shell, поэтому prod* может раскрыться в prod.conf, а пустая $a даст ошибку unary operator expected. Регулярки есть только в [[ ]], и это bash, а не только zsh.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.