括号命令组为什么在POSIX Shell语法中的左括号之后需要空格?
TL; DR:为什么POSIX大括号组在{保留字之后需要空格,但是在保留字之后不需要subshell (? POSIX Shell语法定义了括号组和子shell,如下所示 brace_group : Lbrace compound_list Rbrace subshell : '(' compound_list ')' 现在,如果从字面上看,空格是很重要的。这将意味着必须有空间来描述开括号和闭括号以及括号,如 { echo hello world; } ( echo hello world ) 这也将与“ 复合命令”定义保持一致: 这些复合命令中的每一个在开头都有一个保留字或控制运算符,在结尾处有一个对应的终止符保留字或运算符。 但是,没有意义的是为什么(list)并且可以( list )正常工作((不需要后面的空格),但是括号扩展必须有一个前导空格,即{echo hello;}不起作用。 当然,保留字被视为空壳字会有意义,之后需要一个空格以与字段拆分的概念保持一致,但是定义本身并未提及空格。此外,如果POSIX的复合命令定义都将{和(都视为保留字,那么为什么在这些保留字之后的空格字符方面会有不同的对待?现在,ksh(1)手册确实指出: 单词是字符序列,由无引号的空格字符(空格,制表符和换行符)或元字符(<,>,|,;,&,(和))定界 换句话说,有意义的是ksh将被识别(为单词定界符,其中第一个单词将是命令或变量赋值。POSIX,但是似乎没有提到(元字符。就POSIX语法而言,我发现的唯一可能的解释是{被认为是“令牌”,此处(未列出为一个。 /* These are reserved words, not operator tokens, and are recognized when reserved words …