xargsの改行での分割とスペースでの分割

OS Xでbashのスクリプトを書いていたのだけど、for文で書いている箇所をxargsで処理したいなと思い、書き直そうとしてxargsをあまり知らなかったのでメモ。

xargsはデフォルトでLFを分割するみたいだ。

$ printf 'aaa\nbbb\nccc' | xargs -I{} echo '{}'
aaa
bbb
ccc

-nを使ってあげればスペースでも分割できるみたいだけども、どういうことなんだろう。引数としては'aaa bbb ccc'で一つだと思うんだけど。

$ echo 'aaa bbb ccc' | xargs -I{} -n 1 echo '{}'
aaa
bbb
ccc

-nを付加しないと、echoの内容がそのまま出力される。

$ echo 'aaa bbb ccc' | xargs -I{} echo '{}'
aaa bbb ccc

今までは、findでヌル文字を付けてxargsでヌル文字を区切り文字として分割する、というような使い方しかしてこなかったので調べてよかった。