Из документации bash :
(list)Список выполняется в среде оболочки (см. ниже КОМАНДА ИСПОЛНИТЕЛЬНОЙ СРЕДЫ). Переменные и встроенные команды, которые влияют на среду оболочки, не остаются в силе после ее завершения. Статус возврата - это статус выхода из списка.
Другими словами, вы должны убедиться, что все, что происходит в 'list' (например, a cd), не имеет никакого эффекта вне (и ). Единственное, что утечет, это код завершения последней команды или set -eпервой команды, которая выдает ошибку (кроме нескольких, таких как if, whileи т. Д.)
((expression))Выражение оценивается в соответствии с правилами, описанными ниже в разделе АРИФМЕТИЧЕСКАЯ ОЦЕНКА. Если значение выражения не равно нулю, возвращаемое состояние равно 0; в противном случае возвращаемое состояние равно 1. Это в точности эквивалентно пустому выражению.
Это расширение bash, позволяющее вам выполнять математику. Это несколько похоже на использование exprбез всех ограничений expr(таких как наличие пробелов везде, экранирование *и т. Д.)
[[ expression ]]Вернуть состояние 0 или 1 в зависимости от оценки выражения условного выражения. Выражения состоят из основных цветов, описанных ниже под условными выражениями. Разделение слов и расширение пути не выполняются над словами между [[и]]; Выполняется расширение тильды, расширение параметров и переменных, арифметическое расширение, подстановка команд, подстановка процессов и удаление кавычек. Условные операторы, такие как -f, должны быть заключены в кавычки, чтобы их можно было определить в качестве основных.
При использовании с [[, операторы <и> сортируются лексикографически с использованием текущей локали.
Это предлагает расширенный тест для сравнения строк, чисел и файлов, немного похожий на testпредложения, но более мощный.
[ expr ]Вернуть состояние 0 (true) или 1 (false) в зависимости от оценки условного выражения expr. Каждый оператор и оператор и должен быть отдельным аргументом. Выражения состоят из основных цветов, описанных выше под условными выражениями. test не принимает никаких опций, а также не принимает и игнорирует аргумент - как означающий конец опций.
[...]
Этот звонит test. На самом деле, в старые времена, [была символическая ссылка на test. Это работает так же, и у вас есть те же ограничения. Поскольку двоичный файл знает имя, под которым он был запущен, тестовая программа может анализировать параметры, пока не найдет параметр ]. Приколы Unix.
Обратите внимание, что в случае bash, [и testявляются встроенными функциями (как упомянуто в комментарии), все же в значительной степени применяются те же ограничения.