在命令行中如何解释括号?


45

在阅读有关如何设置的内容时grub,我遇到了一篇文章,声称我需要使用以下两种语法之一,

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

要么

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

因为在命令行中,括号以特殊方式解释。括号有什么特别之处?他们如何解释?

Answers:


46

括号表示bash中的子外壳。引用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 shell命令行语言规范具有对下面的描述(compound-list)语法:

在子shell环境中执行compound-list;请参阅Shell执行环境。列表完成后,影响环境的变量分配和内置命令将不再有效。


在bash和其他炮弹中...?
jasonwryan 2011年

3
bash是我要问的那个……
史蒂夫·布朗

5
$()和之间有什么区别()
CMCDragonkai 2015年

5
@CMCDragonkai $()是命令替换,()是子shell。它们都运行命令,不同之处在于输出发生了什么。名称比符号更容易搜索。另请参见unix.stackexchange.com/q/213530/9537
jw013 2015年

12

括号之间嵌入的命令列表作为子外壳运行。

子外壳程序中的变量在子外壳程序中的代码块之外不可见。父进程,启动子Shell的Shell无法访问它们。这些实际上是局部变量。

参见Linuxtopia-第20章。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.