В чем разница между

Возможный дубликат:
с использованием одиночной или двойной скобки – bash

Когда следует использовать один кронштейн? [

  • Отображение «PRI» и «NI» через «top -stats»
  • Почему мое приложение умирает без nohup?
  • Считайте удаленные файлы с помощью интерактивного rm (rm -i)
  • Проверьте, работает ли постфикс
  • Как я могу уловить код выхода команды для более позднего, в Makefile?
  • Cron: Почему мои скрипты cron не работают, хотя cron работает
  • Когда следует использовать двойные скобки? [[

    Оба POSIX совместимы?

  • Замена переменной переменной Bash с последующим подчеркиванием
  • Как создать цикл for с переменным числом итераций?
  • Запустить команду входа ssh без изменения удаленного .bashrc
  • В чем разница между тем, чтобы nohup не добавлял «nohup.out» и явно перенаправлял его в файл?
  • Как избежать этих ложных символов в моей подсказке bash?
  • как обнаружить спящий режим / резюме ноутбука (закрыть крышку, открыть) в osx из сценария bash
  • 2 Solutions collect form web for “В чем разница между”

    Единая скобка является традиционной формой и часто реализуется как внешняя команда. Двойная скобка – расширение bash (и ksh и zsh), не входит в POSIX и имеет преимущество более чистого синтаксиса (см. Ниже) и не использует отдельный процесс.

    Одна из синтаксических различий заключается в том, что операторы < и > (обратите внимание: не стандартный POSIX) не нужно экранировать или цитировать, чтобы избежать чтения в качестве оператора перенаправления. Кроме того, [ требует некоторых приемов, если одна из строк может быть пустой или начинаться с дефиса. Вот почему вы видите, что скрипты делают что-то вроде [ "x$ASD" == xValue ] тогда как с bash они могут просто использовать [[ $ASD == Value ]] . Обратите внимание, что трюк «x» не является строго необходимым, если команда POSIX-совместимая команда тестирует только одну вещь, для получения более подробной информации см. Этот вопрос .

    В FAQ по bash содержится дополнительная информация о различиях. На это также был дан ответ на другом сайте обмена стеками.

    Только [ ( test ) находится в POSIX. Вы не найдете [[ указанный в POSIX, кроме как зарезервированное слово, которое могут использовать реализации. Bash действительно использует [[ как расширенный тестовый оператор, и если вы пишете скрипты, предназначенные специально для bash , всегда используйте [[ потому что он намного эффективнее, чем [ и безопаснее использовать его. Если, однако, вы ориентируетесь на POSIX sh , вам нужно использовать [ , и обязательно указывать аргументы и не использовать более 4 аргументов для [ .

    Linux и Unix - лучшая ОС в мире.