Bash - 如何区分控制操作符和元字符?

时间:2015-06-20 09:13:02

标签: bash shell

根据bash manual

  

control operator

     

执行控制功能的令牌。它是换行符或以下之一:'||','&&','&',';',';;','|','|& ;','('或')'。

     

metacharacter

     

一个字符,当不加引号时,会分隔单词。元字符是空白或以下字符之一:'|','&',';','(',')','<'或'>'

许多字符都是control operatormetacharacter

那么我怎么能知道例如语法类别呢?一个;

if COND ; then CMD ; fi为例。

;在上下文中似乎是control operator,因为它可以替换为换行符。 但是,删除;周围的空格之前和之后仍然有效。 如果它是一个运算符,它不应该被sapces分开吗?

1 个答案:

答案 0 :(得分:4)

根据bash手册,operator是:

  

控制运算符重定向运算符。请参阅重定向,   获取重定向运算符列表。 运算符至少包含一个   不带引号的元字符。

元字符基本上是任何不能成为word.

一部分的字符

word的定义:

  

由shell处理为一个单元的字符序列。单词可能不包括不带引号的元字符。

operators周围不需要空格,因为它们始终包含metacharacters,这使得解析器知道它不属于word

例外是redirection,例如

ls 2>&1

在重定向语句之前需要一个空格,因为运算符具有参数2,并且要求参数位于运算符旁边(否则它将是ls的参数)。