Shell分组命令中{后需加空格的原因及语法疑问
Shell语法疑问:为何
{后必须加空格,而};前无需空格? 错误示例与报错
错误写法的代码:
{sleep 1; echo 123;}&
执行后Shell提示错误:Syntax error: "}" unexpected
正确写法
需要在{后添加空格:
{ sleep 1; echo 123;}&
原因解析
这要从Shell的词法解析逻辑说起:
{是Shell的复合命令关键字,不是普通命令。Shell解析代码时会把连续字符当作一个整体词元。如果{直接跟sleep,Shell会把{sleep当成一个完整的、不存在的命令名,根本没识别出{这个关键字,自然找不到对应的结束标记},于是报错。- 而
123;}里的},前面的分号;已经是Shell的命令分隔符,它把123;和}拆成了两个独立的词元,Shell能明确认出}是复合命令的结束标记,所以不需要额外加空格。
总结一下:{作为关键字,必须用空格(或空白符、分号)和后面内容隔开,让Shell单独识别它;}前面有分号做分隔,Shell能准确识别,所以不用空格。
内容的提问来源于stack exchange,提问作者yuanjianpeng
相关产品推荐
相关产品推荐

