2017-07-06 39 views
8

當我執行以下命令時,在bash shell上出現錯誤,但在Korn shell上運行得很好。唯一的區別是在awk後面缺少單引號。你能幫我理解爲什麼嗎?爲什麼ksh允許不成對的引號而bash不能?

echo `echo "a b c d" | awk '{ print $1 }` 
+6

ksh在這只是錯誤的,引號必須配對xor逃脫。 –

+0

它不會在我的ksh中給出錯誤,(os x)。奇怪! – jas

+6

一個錯誤是正確的行爲,所以它看起來在bash中運行得非常好,但在Korn中運行得不正確,而不是相反。 –

回答

1

在Korn shell中,無論是反引號和報價可以留下無法比擬的,標記生成器將嘗試和猜測其中或者將結束,並相應地匹配。

實例:

/home/ufierro # echo "`echo ah" 
+ echo ah 
+ echo ah 
ah 

/home/ufierro # echo `echo 'hello world` 
+ echo 'hello world' 
+ echo hello world 
hello world 

注意這兩個例子中如何示出了用於上述動作的情況下不同。 第一個示例顯示瞭解析過程中如何完成雙引號內的單個返回打勾,第二個示例顯示瞭如何完成返回打勾內的單引號。

+0

謝謝。我猜想它可能試圖猜測,但我想知道爲什麼:)不是很容易出錯,或者有一些具體的邏輯,所以它不會是? – user1578026

+0

這是一個真正的具體行爲,只發生在一組特定的引用/反標記中,它會匹配被解析的標記並嘗試完成引用以防止出現錯誤,確實很難看,但幾乎不會出錯,除非您打算產生錯誤這條路。 –

相關問題