1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

xargsに -I オプションを付けると、入力をスペースで区切ってくれなくなるぞ!? への対策

Posted at

Macでうまく動いたxargsコマンドが、Linuxで意図と違う動きをしてしまうことがあります。

$ echo a b c | xargs -n1 -I char echo ___char___
___a b c___

あれあれ、a b cがひとつながりの文字列になってしまった? 特にダブルクオートもしていないのに? Macではもちろん

___a___
___b___
___c___

と出力されたのに?

これは、-Iオプションの性質です。

Replace occurrences of replace-str in the initial-arguments with names read from standard input. Also, unquoted blanks do not terminate input items; instead the separator is the newline character. Implies -x and -L 1.

とmanにもあり、-Iオプションを使ったときには改行しか区切りとみなされなくなるんです。GNU版では。

対策

xargsコマンドを一回かませて、改行区切りのリストに変換してからxargs -Iに渡しましょう。

$ echo a b c | xargs -n1 | xargs -n1 -I char echo ___char___
___a___
___b___
___c___
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?