2011-01-07 107 views
3

這是什麼打印你的外殼?雙重定向測試

echo foo | while read line; do echo $line; done < <(echo bar) 

我希望它評估爲echo foo | barfoo < <(bar),這兩者都會導致錯誤消息。

在bash 4.1.5它看起來像管被簡單地丟棄:

bar 

在短跑:

sh: Syntax error: redirection unexpected 
+0

它爲什麼重要?這是不好的設計,你不應該多次重定向標準輸入。 – Benoit

+0

這更多的是一個心理練習 - 我只是意識到它是有效的語法,它應該做一些「合理」的事情。 – l0b0

回答

3

短跑不支持進程替換(<())。

如果您使用您正在比較的每個shell所支持的語法,則所看到的行爲是一致的。試試這個:

echo hello | cat < inputfile 

你應該看到「inputfile」的內容而不是「hello」。我嘗試過的幾個炮彈中,只有Z炮彈顯示了兩者。

這是POSIX說,關於管道和重定向:

的Command標準輸出應連接到命令command2的標準輸入。標準輸入,標準輸出或這兩個命令都應被認爲由流水線在由作爲命令一部分的重定向運算符指定的任何重定向之前分配(請參閱重定向)。

我將其解釋爲意味着在上述示例中,管道將stdin分配給cat,然後重定向將覆蓋它。

+0

用於引用標準 – SiegeX