嘿,我已經研究了一段時間,我想知道是否有人可以解釋 bash shell 上這個特定功能的機制。
比方說,我們有3個檔案:test1.txt,test2.txt,和test3.txt。
每個檔案的內容:
test1.txt =“富”
test2.txt =“酒吧”
test3.txt = "你好世界"
如果我們在 bash shell 上運行以下命令:cat < test1.txt test2.txt test3.txt我們會得到:
bar
hello world
我的問題是為什么test1.txt在這種情況下忽略了內容,如果有人有任何好的來源,我可以閱讀此特定功能。
uj5u.com熱心網友回復:
在識別引數之前處理輸入重定向。例如,您顯示的命令等效于每個
< test1.txt cat test2.txt test3.txtcat test2.txt < test1.txt test3.txtcat test2.txt test3.txt < test1.txt
在任何情況下,您cat的標準輸入都是test1.txt,它接收兩個命令列引數test2.txt和test3.txt。
cat但是,如果它沒有命名輸入檔案的引數,則僅從其標準輸入讀取。如果要從標準輸入和命名檔案中讀取,請-用作標準輸入的“名稱”。
# Same result as cat test1.txt test2.txt test3.txt
cat - test2.txt test3.txt < test1.txt
uj5u.com熱心網友回復:
默認情況下,cat(與大多數實用程式一樣)只有在沒有檔案名引數的情況下才從標準輸入中讀取。由于您正在傳遞test2.txt和test3.txt作為檔案名,它會忽略輸入重定向。
但是,您可以將其-用作表示標準的引數。所以你可以這樣做:
cat - test2.txt test3.txt < test1.txt
當您從檔案重定向時,這不是很有用,因為您可以只提供檔案名作為普通引數而不是使用重定向,但在管道時它可能很有用:
grep foo test1.txt | cat - test2.txt test3.txt
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/380259.html
上一篇:從零開始以太坊(三)
