xargsを使う際には`echo`は書かなくてもよいことをmanページから知った
Contents
はじめに
小さなことですが、 xargs
の man
ページを見ていて気づいたことが 2つ ありました。
検証環境
$ bash -version | head -n 1
GNU bash, version 4.2.46(2)-release (x86_64-redhat-linux-gnu)
$ xargs --version | head -n 1
xargs (GNU findutils) 4.5.11
man
ページの一部抜粋
一部抜粋します。
以下のようなことが書いてありました。
xargs reads items from the standard input, delimited by blanks (which can be protected with double or single quotes or a backslash) or newlines,
and executes the command (default is /bin/echo) one or more times with any initial-arguments followed by items read from standard input.
今回学んだことは2点。
- xargsに渡すパラメータの情報はダブルクォートやシングルクォートでグループ化できる
- xargsで実行するコマンドを明示しなかった場合は
echo
コマンドが利用される
試してみます。
xargsに渡すパラメータの情報はダブルクォートやシングルクォートでグループ化できる
標準入力から情報を1つずつ受け取って、 echo
させてみます。
( -n 1
オプションを指定すれば、標準入力から受け取るパラメータを1つずつにできます。 )
$ echo a b c d | xargs -n 1 echo
a
b
c
d
ここで、 "a" と "b" だけはひとまとめに処理させたい場合にはシングルクォートあるいはダブルクォートで囲んでやることでグルーピングできるということです。
やってみます。
$ echo "a b" c d | xargs -n 1 echo
a
b
c
d
上記の方法では echo
の実行結果からダブルクォートが除去されてしまうため、もう一括り外側で囲んでやる必要があります。
$ echo '"a b"' c d | xargs -n 1 echo
a b
c
d
シングルクォートとダブルクォートの位置を入れ替えても同様の結果が取得できます。
$ echo "'a b'" c d | xargs -n 1 echo
a b
c
d
xargsで実行するコマンドを明示しなかった場合は echo
コマンドが利用される
これがびっくりしました。
実は echo
コマンドを実行させたい場合は明示しなくても良いそうです。
$ echo a b c d | xargs -n 1
a
b
c
d
確かに echo
を書かなくても動作していますね。
コードゴルフ の際には大きな武器になります。
ひとこと
xargs
は読み進めるともっと便利な機能、きっとあると思う。
ディスカッション
コメント一覧
まだ、コメントがありません