Они в основном одинаковы, за исключением того, что:
Объявление псевдонима совместимо с шаблонами, тогда как тип typedef не является.
blockquote>
[[
имеет меньше неожиданностей и обычно более безопасен использовать. Но это не портативно - POSIX не определяет то, что это делает и только некоторые оболочки поддерживают его (около удара, я слышал, что ksh поддерживает его также). Например, можно сделать
[[ -e $b ]]
, чтобы протестировать, существует ли файл. Но с [
, Вы имеете к кавычке $b
, потому что она разделяет аргумент и разворачивает вещи как "a*"
(где [[
берет его буквально). Это должно также сделать с тем, как [
может быть внешняя программа и получает ее аргумент просто обычно как любая программа (хотя это может также быть встроенное, но тогда она все еще не имеет этой специальной обработки).
[[
также имеет некоторые другие хорошие функции, как соответствие регулярного выражения =~
наряду с операторами как они известны в подобном языкам C. Вот хорошая страница об этом: , Каково различие между тестом, [
и [[
? и Тесты Bash
[[ ]]
имеет больше функций - я предлагаю, чтобы Вы смотрели на Усовершенствованное Руководство по созданию сценариев Bash для большего количества информации, конкретно расширенный тестовый раздел команды в Глава 7. Тесты .
Кстати, поскольку руководство отмечает, [[ ]]
был представлен в ksh88 (версия 1988 года оболочки Korn).
От , Какой компаратор, тест, скобка, или двойная скобка, является самым быстрым? ( http://bashcurescancer.com )
двойная скобка является “compound command”, где, поскольку тест и одиночная скобка являются созданной-ins оболочкой (и в действительности та же команда). Таким образом одиночная скобка и двойная скобка выполняют другой код.
тест и одиночная скобка являются самыми портативными, поскольку они существуют как отдельные и внешние команды. Однако, если Ваше использование какой-либо удаленно современной версии Bash, двойная скобка поддерживается.