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

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

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

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

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

  • Почему существует тип идентификаторов процессов (pid_t), но не для файловых дескрипторов (fd)?
  • Где $ _ определяется POSIX?
  • Использование команды чтения оболочки с функциями редактирования в реальном времени (например, чтение)
  • Стандарты для строк с двойными кавычками
  • Независимый от оболочки путь к cp dotfiles из папки в другую
  • Почему некоторые приложения используют ~ / .config / appname для своих конфигурационных данных, а другие используют ~ / .appname?
  • Что означают буквы в команде `fc`?
  • пояснение о chown (1) Спецификация POSIX
  • 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 - лучшая ОС в мире.