Как скобки интерпретируются в командной строке?
Во время чтения о том, как настроить grub
, я наткнулся на статью, утверждающую, что мне нужно использовать один из двух следующих синтаксисов:
echo \(hd0,0\) >> /boot/grub/grub.conf
или
- Ошибка с именем файла, содержащим круглые скобки
- Какие символы должны быть экранированы в аргументах командной строки?
- Почему двойные кавычки и backquotes в сценарии оболочки?
- команда: ls / etc | сортировать | grep d * не дает результатов, но ls / etc | сортировать | grep p * перечисляет всю директорию
- -bash:! '@ 10.109.10.142/?ip=10.109.8.39: событие не найдено
echo '(hd0,0)' >> /boot/grub/grub.conf
потому что в командной строке скобки интерпретируются особым образом. Что особенного в круглых скобках? Как они интерпретируются?
2 Solutions collect form web for “Как скобки интерпретируются в командной строке?”
Скобки обозначают подоболочку в bash. Чтобы процитировать страницу man:
(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.
где list
– это просто нормальная последовательность команд.
Это на самом деле довольно портативный и не специфический только для bash
. Спецификация языка командной оболочки POSIX имеет следующее описание синтаксиса (compound-list)
:
Выполнение составного списка в среде подсетей; см. « Среда выполнения оболочки» . Переменные назначения и встроенные команды, которые влияют на среду, не должны оставаться в силе после завершения списка.
Список команд, встроенный в круглые скобки, выполняется как подоболочка.
Переменные в подоболочке не видны вне блока кода в подоболочке. Они недоступны для родительского процесса, для оболочки, которая запустила подоболочку. Это, по сути, локальные переменные.
См. Linuxtopia – Глава 20. Подледы