Як інтерпретуються дужки в командному рядку?


45

Читаючи, як налаштувати grub, я натрапив на статтю, у якій стверджується, що мені потрібно використовувати один із наступних двох синтаксисів,

echo \(hd0,0\) >> /boot/grub/grub.conf

або

echo '(hd0,0)' >> /boot/grub/grub.conf

тому що в командному рядку дужки інтерпретуються особливим чином. Що особливого в дужках? Як вони трактуються?

Відповіді:


46

Підкресли позначають нижню частину в башті. Щоб цитувати man bashсторінку:

(list)    list  is  executed  in  a  subshell  environment (see COMMAND
          EXECUTION ENVIRONMENT below).  Variable assignments and builtin 
          commands that affect the shell's environment do not remain in 
          effect after the command completes.  The return status is the
          exit status of list.

де a list- просто нормальна послідовність команд.

Це насправді досить портативно і не характерно лише для цього bash. Специфікація мови командної оболонки POSIX має такий опис для (compound-list)синтаксису:

Виконувати складений список у середовищі підзагорта; див. середовище виконання оболонки . Змінні призначення та вбудовані команди, що впливають на навколишнє середовище, не залишаться в силі після закінчення списку.


В баш та інших снарядів ...?
Jasonwryan

3
Баш - це той, про кого я питав ...
Стів Браун

5
Яка різниця між $()і ()?
CMCDragonkai

5
@CMCDragonkai Підстановка $()команд, нижча оболонка (). Вони обидва виконують команди, різниця в тому, що відбувається з результатом. Імена набагато простіше шукати, ніж символи. Дивіться також unix.stackexchange.com/q/213530/9537
jw013

12

Список команд, вбудований між круглими дужками, виконується як допоміжна оболонка.

Змінні в нижній частині корпусу не видно за межами блоку коду в підпакеті. Вони недоступні для батьківського процесу, до оболонки, яка запустила підпакет. Це, по суті, локальні змінні.

Див. Linuxtopia - Розділ 20. Підписки

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.