Из документации 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
являются встроенными функциями (как упомянуто в комментарии), все же в значительной степени применяются те же ограничения.