echo '--help' | cat
該命令輸出的是echo的內容,也就是說將echo的內容當作cat處理的文件內容了,實際上就是echo命令的輸出通過管道定向到cat的輸入了。然后cat從其標準輸入中讀取待處理的文本內容。這等價于在test.txt文件中有一行字符 '--help' 然后運行 cat test.txt
的效果。
而echo '--help' | xargs cat
等價于 cat --help
什么意思呢,就是xargs將其接受的字符串 --help 做成cat的一個命令參數來運行cat命令,同樣echo 'test.c test.cpp' | xargs cat
等價于 cat test.c test.cpp
此時會將test.c和test.cpp的內容都顯示出來。
一些參數
-d 選項
默認情況下xargs將其標準輸入中的內容以空白(包括空格、Tab、回車換行等)分割成多個之后當作命令行參數傳遞給其后面的命令,并運行之,我們可以使用 -d 命令指定分隔符
echo '11@22@33' | xargs echo
echo '11@22@33' | xargs -d '@' echo
指定以@符號分割參數,所以等價于 echo 11 22 33 相當于給echo傳遞了3個參數,分別是11、22、33
-p 選項
使用該選項之后xargs并不會馬上執行其后面的命令,而是輸出即將要執行的完整的命令(包括命令以及傳遞給命令的命令行參數),詢問是否執行,輸入 y 才繼續執行,否則不執行。
-n 選項
該選項表示將xargs生成的命令行參數,每次傳遞幾個參數給其后面的命令執行,例如如果xargs從標準輸入中讀入內容,然后以分隔符分割之后生成的命令行參數有10個,使用 -n 3 之后表示一次傳遞給xargs后面的命令是3個參數,因為一共有10個參數,所以要執行4次,才能將參數用完.
-E 選項,有的系統的xargs版本可能是-e eof-str
該選項指定一個字符串,當xargs解析出多個命令行參數的時候,如果搜索到-e指定的命令行參數,則只會將-e指定的命令行參數之前的參數(不包括-e指定的這個參數)傳遞給xargs后面的命令.
-E只有在xargs不指定-d的時候有效,如果指定了-d則不起作用,而不管-d指定的是什么字符,空格也不行。