簡單回答

簡單回答

xargs我在和命令方面遇到了麻煩pipe。這是一個例子 =

echo 'a' | xargs mkdir

此指令會建立一個名為 的目錄a。所以我可以理解這個命令相當於mkdir a

但為什麼這個命令不起作用= echo 'a' | mkdir

我讀到該pipe命令將左命令的輸出作為輸入傳遞給右命令,而| xargs命令將左命令的輸出作為參數傳遞給右命令。

1-輸入和參數有什麼區別?

2-echo 'a' | mkdir為什麼這個指令不起作用以及這個指令的等效項是什麼?

謝謝...

答案1

簡單回答

參數是輸入。

更長的答案

還有其他類型的輸入。

在您的範例中,echo 'a' | mkdir您希望mkdir讀取其標準輸入。然而,mkdir並沒有編寫這樣做。

您所說的輸入是標準輸入(stdin)。輸出為標準輸出 ( stdout)。全部存在標準誤 ( stderr)。和退出代碼。

甚至更長的答案——那麼有什麼區別呢?

參數必須在程式啟動之前可用。它通常是: 短;包含選項、檔案名稱和短文字。

標準輸入可以在程式運行時寫入;可以向其發送程式啟動時不存在的資料;不保證可以亂序讀取(所以按順序讀取);可以是任意長度;如果您需要更多發送檔案名稱作為參數,每個進程只有一個標準輸入;

echo 'a' | xargs mkdir沒有怎麼辦xargs

mkdir "$(echo 'a')"

這些$()方法運行包含的命令,然後$()用該命令的標準輸出取代 及其內容。

答案2

我也曾為此困惑過很長一段時間。我將舉一個可能稍微簡單一點的例子(我到目前為止還不是 bash 專家):

wc "test" 
wc <<< "test" (same as: echo "test" | wc)

這兩者的結果是非常不同的。第一個嘗試讀取文件test,第二個顯示1 1 5

這裡的問題是wc "test"得到爭論 "test"作為輸入,而wc <<< "test"需要標準輸入


因此,當您發出echo 'a' | xargs mkdir(xargs 代表:作為參數執行)時,您正在傳遞一個爭論mkdir;這就像做:mkdir a

另一方面,當您發出echo 'a' | mkdir(更簡單的是mkdir <<< 'a':)時,您將a作為標準輸入傳遞。

mkdir對待這些事情的方式非常不同,因此你看到的結果是不同的。

相關內容