xargsに-nオプションと-Lオプションがあってどちらも似たような感じの説明になっているのだが、いままであまり考えずに-nをつかってた。

挙動の違いは個数単位か行単位かの違い。xargsの入力が1行につき1個のトークンなら-Lも-nも同じだが、1行に複数のトークンがある場合に結果が違ってくる。

% cat foo.sh
echo "1 2 3"
echo "4 5 6"
% sh foo.sh
1 2 3
4 5 6
% sh foo.sh | xargs -L1 echo  #1行ずつ処理される
1 2 3
4 5 6
% sh foo.sh | xargs -n1 echo  #1個ずつ処理される
1
2
3
4
5
6
% sh foo.sh | xargs -L2 echo  #2行まとめて処理される
1 2 3 4 5 6
% sh foo.sh | xargs -n2 echo  #2個ずつ処理される
1 2
3 4
5 6
% 

koie