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

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

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

  • вывести вывод cat в сценарий узла
  • Каковы разделители слов readline?
  • Как передать несколько аргументов через ssh и использовать эти аргументы в сценарии ssh?
  • Как выполнить shellscript, когда я подключаю USB-устройство
  • Как я могу обернуть сложную команду сценарием оболочки?
  • читать с историей
  • Когда следует использовать двойные скобки? [[

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

  • Сравните две записи файлов, чтобы найти идентичные файлы, но игнорировать расширения
  • Команды Emacs в xterm
  • Наследование ловушек сигнала Bash
  • Перемещение по пробельному разделительному слову в bash / readline
  • Как определить функцию Bash, которая может использоваться различными скриптами
  • Помогите написать функцию 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 - лучшая ОС в мире.