Являются ли двойные квадратные скобки [[]] предпочтительнее одиночных квадратных скобок [] в Bash?

Они в основном одинаковы, за исключением того, что:

Объявление псевдонима совместимо с шаблонами, тогда как тип typedef не является.

489
задан codeforester 1 August 2018 в 05:13
поделиться

3 ответа

[[ имеет меньше неожиданностей и обычно более безопасен использовать. Но это не портативно - POSIX не определяет то, что это делает и только некоторые оболочки поддерживают его (около удара, я слышал, что ksh поддерживает его также). Например, можно сделать

[[ -e $b ]]

, чтобы протестировать, существует ли файл. Но с [, Вы имеете к кавычке $b, потому что она разделяет аргумент и разворачивает вещи как "a*" (где [[ берет его буквально). Это должно также сделать с тем, как [ может быть внешняя программа и получает ее аргумент просто обычно как любая программа (хотя это может также быть встроенное, но тогда она все еще не имеет этой специальной обработки).

[[ также имеет некоторые другие хорошие функции, как соответствие регулярного выражения =~ наряду с операторами как они известны в подобном языкам C. Вот хорошая страница об этом: , Каково различие между тестом, [ и [[? и Тесты Bash

549
ответ дан codeforester 1 August 2018 в 15:13
поделиться
  • 1
    При необходимости в этой функциональности просто сделайте дженерик типа < Object> получить старую функциональность. Всегда использование дженериков делает Ваши намерения более ясными. – bradtgmurray 11 September 2008 в 12:12

[[ ]] имеет больше функций - я предлагаю, чтобы Вы смотрели на Усовершенствованное Руководство по созданию сценариев Bash для большего количества информации, конкретно расширенный тестовый раздел команды в Глава 7. Тесты .

Кстати, поскольку руководство отмечает, [[ ]] был представлен в ksh88 (версия 1988 года оболочки Korn).

55
ответ дан Nils von Barth 1 August 2018 в 15:13
поделиться
  • 1
    Это - большая часть " direct" путь ко мне, другие предложенные ответы больше походят на обходные решения. – Ugur Turan 13 April 2012 в 07:26

От , Какой компаратор, тест, скобка, или двойная скобка, является самым быстрым? ( http://bashcurescancer.com )

двойная скобка является “compound command”, где, поскольку тест и одиночная скобка являются созданной-ins оболочкой (и в действительности та же команда). Таким образом одиночная скобка и двойная скобка выполняют другой код.

тест и одиночная скобка являются самыми портативными, поскольку они существуют как отдельные и внешние команды. Однако, если Ваше использование какой-либо удаленно современной версии Bash, двойная скобка поддерживается.

11
ответ дан kristopolous 1 August 2018 в 15:13
поделиться
  • 1
    @UgurTuran: Да, однако интересно о производительности? Wouldn' t знают, пока Вы не попробовали, но пищеварительный тракт говорит, что другие происходят быстрее из-за возможности для, имеет поиск по таблице. – Hans 1 February 2013 в 19:31
Другие вопросы по тегам:

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