2011-09-17 32 views
1

我想給nul分隔的xargs提供一個輸入。爲此我有這樣的:在xargs中使用-0

$ echo -n abc$'\000'def$'\000' | xargs -0 -L 1 

我得到

abcdef 

我不知道爲什麼沒有打印O/P爲

abc 
def 
+2

我建議使用'printf'命令,而不是'echo'。它的行爲更加一致。 'echo'可以是一個外部命令,'/ bin/echo',它可以從一個系統變化到另一個系統,或者它是一個內置於幾個不同shell中的shell,同樣具有從一個系統到另一個系統的不同行爲。對於簡單的'echo hello world'情況來說,這很好,當你的腳本僅僅用於bash時,它可能是好的,但對於任何和你在做的事情一樣複雜的東西,我會用'printf'。在你的情況下:'printf'abc \ 0def \ 0'' –

+0

我剛剛意識到'printf'也是一個'bash'內建以及外部命令,但差異相對較小。 –

回答

3

你的主要問題是,你忘了-e

$ echo -n abc$'\000'def$'\000' |cat -v 
abcdef 

無零字節a再見。但這:

$ echo -en abc'\000'def'\000' |cat -v 
abc^@def^@ 

是更喜歡它的^@cat -v如何展示一個零字節。而現在xargs

$ echo -en abc'\000'def'\000' | xargs -0 -L 1 
abc 
def 

從bash提示符嘗試help echo

+0

謝謝,完美的回答,是的,我忘了-e! – abc

+2

並非如此:您期望$'\ 000'在參數列表中生成一個字面NUL字符,以「echo」,而不是。由於參數列表是如何在進程之間傳遞的(C字符串的數組是零終止的),所以不幸的是,在參數中沒有辦法使用文字NUL。 – tripleee

+0

'od -c'是一種更好的方式來查看控制字符 –

1

嘗試將輸入視爲單引號字符串。

echo -ne "abc\0def\0" | xargs -0 -L 1