Когда использовать () vs. {} в bash?

Может быть, кто-то из израильского локомома находится поблизости и может помочь вам с live-CD или USB или такими? Попробуйте чат, форумы и т. Д.

1
задан 7 April 2015 в 19:24

3 ответа

Из официальной документации bash:

()
( list )
Размещение списка команд между круглыми скобками приводит к созданию среды подклассов, и каждая из команд в списке должна выполняться в этой подоболочке. Поскольку список выполняется в подоболочке, назначения переменных не остаются в силе после завершения подоболочки. {}
{ list; }
Размещение списка команд между фигурными скобками приводит к тому, что список будет запущен в текущем контексте оболочки. Не создается подоболочка. Требуется список точек с запятой (или новой строки).
21
ответ дан 23 May 2018 в 21:39

Код в '{}' выполняется в текущем потоке / процессе / среде, и изменения сохраняются, чтобы сделать его более лаконично, код запускается в текущей области. Код в '()' запускается внутри отдельного дочернего процесса bash, который отбрасывается после выполнения. Этот дочерний процесс часто упоминается как под-оболочка и может рассматриваться как новая дочерняя область.

В качестве примера рассмотрим следующее ...

 ~ # { test_var=test }
 ~ # echo $test_var
 test
 ~ # ( test_var2=test2 )
 ~ # echo $test_var2

 ~ # 

Обратите внимание, что в первом примере с '{}' переменная по-прежнему установлена ​​даже после закрытия '}', тогда как в примере с '() переменная не задана за пределами области' () '.

9
ответ дан 23 May 2018 в 21:39

(...) используются для запуска кода в под-оболочке. Используемый код bewteen {...} не будет использоваться в под-оболочке.

4
ответ дан 23 May 2018 в 21:39

Другие вопросы по тегам:

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