2015-06-20 45 views
0

根據bash manualBash - 如何區分控制操作符與元字符?

control operator

執行的控制功能的標記。這是一個換行或以下其中一項:'||','& &','&',';',';;','|',';' &','('或')'。

metacharacter

一個字符,沒有引用的時候,分離的話。元字符是空白或以下字符之一:'|','&',';','(',')','<'或'>'。

許多字符都是control operatormetacharacter

那麼,我怎麼能知道例如的語法類別。 a ;?以if COND ; then CMD ; fi爲例。

;在上下文中看起來像是control operator,因爲它可以替換爲換行。 但是刪除前後空間 s圍繞;仍然工作正常。 如果它是運營商是不是應該被sapces分開?

回答

3

根據bash的手冊,一個operator是:

控制操作員重定向操作。請參閱重定向, 以獲取重定向運算符的列表。 運算符至少包含一個 未加引號的元字符。

元字符基本上是不能的word一個word.

定義的一部分的任何字符:

作爲一個單元由shell處理的字符序列。單詞可能不包含未加引號的元字符。

沒有必要周邊operators空間,因爲它們總是包含metacharacters,這使得解析器知道它是不是word的一部分。

例外是redirection,其中例如,

ls 2>&1 

要求之前重定向語句空間,因爲運營商有一個參數2,並要求該參數是旁邊的操作(否則這將是一個ls參數)。

+0

我很想念';'和'['一樣。現在我清楚了,''''而';'是一個操作符。謝謝。 – nn0p