根据bash manual:
control operator
执行控制功能的令牌。它是换行符或以下之一:'||','&&','&',';',';;','|','|& ;','('或')'。
metacharacter
一个字符,当不加引号时,会分隔单词。元字符是空白或以下字符之一:'|','&',';','(',')','<'或'>'
许多字符都是control operator
和metacharacter
。
那么我怎么能知道例如语法类别呢?一个;
?
以if COND ; then CMD ; fi
为例。
;
在上下文中似乎是control operator
,因为它可以替换为换行符。
但是,删除;
周围的空格之前和之后仍然有效。
如果它是一个运算符,它不应该被sapces分开吗?
答案 0 :(得分:4)
根据bash手册,operator
是:
控制运算符或重定向运算符。请参阅重定向, 获取重定向运算符列表。 运算符至少包含一个 不带引号的元字符。
元字符基本上是任何不能成为word.
word
的定义:
由shell处理为一个单元的字符序列。单词可能不包括不带引号的元字符。
operators
周围不需要空格,因为它们始终包含metacharacters
,这使得解析器知道它不属于word
。
例外是redirection
,例如
ls 2>&1
在重定向语句之前需要一个空格,因为运算符具有参数2
,并且要求参数位于运算符旁边(否则它将是ls
的参数)。