8章ブラッシュワンライナーの作成

「まえがき」で紹介した、次のような長くて複雑なコマンドを覚えていますか?

$ paste <(echo {1..10}.jpg | sed 's/ /\n/g') \ 
        <(echo {0..9}.jpg | sed 's/ /\n/g') \ 
  | sed 's/^/mv /' \ 
  | bash 

このような「魔法の呪文」は、ブラッシュワンライナー(brash one-liner)と呼ばれています†1。これが何を行い、どのように機能するかを理解するために、これを分解してみましょう。最も内側にあるechoコマンドは、ブレース展開を使って、JPEGファイル名のリストを生成します。

[†1] 筆者が知るかぎり、この用語が使われている最も古いものは、BSD Unix 4.xでのlorder(1)のmanページです(https://oreil.ly/ro621)。Bob Byrnesさん、見つけてくれてありがとう。

$ echo {1..10}.jpg 
1.jpg 2.jpg 3.jpg ... 10.jpg
$ echo {0..9}.jpg 
0.jpg 1.jpg 2.jpg ... 9.jpg

これらのファイル名をsedにパイプで渡し、スペースを改行に置き換えます。

$ echo {1..10}.jpg | sed 's/ /\n/g' 
1.jpg
2.jpg
⋮
10.jpg
$ echo {0..9}.jpg | sed 's/ /\n/g' 
0.jpg
1.jpg
⋮
9.jpg

pasteコマンドは、2つのリストを横に並べて表示します。プロセス置換を使うと、pasteは2つのリストを、あたかもファイルであるかのように読み込むことができます。 ...

Get Efficient Linuxコマンドライン ―開発と自分に磨きをかけるLinuxのテクノロジー now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.