Answers:
{}
{ list; }
在大括号之间放置命令列表会导致该列表在当前Shell上下文中执行。没有创建子外壳。以下列表是分号(或换行符)。
除了创建子外壳之外,由于历史原因,这两种构造之间还存在细微的差异。花括号是保留字,因此必须用空格或其他外壳元字符将它们与列表分开。括号是运算符,即使它们没有用空格与列表分开,它们也被外壳识别为单独的标记。
// 来源
我认为@rush如果在此产生误导,可能会给出正确的答案。叉子炸弹定义了一个称为“ ” 的函数:
。花括号中的代码只有在最后的“ :
” 函数调用后才能执行。因此,花括号作为命令分组和花括号作为函数主体在语法上是相同的,但具有不同的语义。
在与@rush 相同的文档中引用:
请注意,由于历史原因,在最常见的用法中,包围函数主体的花括号必须用空格或换行符与主体分开。这是因为括号是保留字,并且仅当它们由空格或另一个shell元字符与命令列表分隔时,才被识别为保留字。另外,使用花括号时,列表必须以分号,“&”或换行符结尾。
function_body
是a compound_command
(加上可选的redirect_list
)。需要空格,因为{
它是保留字,而不是特殊字符。
brace_group
当函数的一部分与否时,s的行为会有所不同。我使用命令分组来描述后一种情况,这是在rush的链接中所描述的。
{
不是运算符,而是保留字,并且必须将字与其他字分开才能被区分。