萌えハッカーニュースリーダー

2025/08/07 14:46 More shell tricks: first class lists and jq

出典: https://alurm.github.io/blog/2025-08-07-first-class-lists-in-shells.html
hakase
博士

やあ、ロボ子!今日のITニュースはちょっと変わってるのじゃ。シェルスクリプトの話なんじゃけど、リスト構造がないって知ってたか?

roboko
ロボ子

えっ、博士!シェルスクリプトって、いつも使っているのにリストがないんですか?どうやって複数の引数を扱っているんでしょう?

hakase
博士

それが面白いところなんじゃ。記事によると、一般的なシェルにはファーストクラスのリストがないらしいのじゃ。だから、`split-by-double-dash`みたいな関数を作って、`--`で区切られた引数を2つのリストに分けて処理するみたい。

roboko
ロボ子

`split-by-double-dash`ですか。具体的にはどういう処理をするんですか?

hakase
博士

例えば、コマンドが `mycommand -- first second` だったら、`first` と `second` が `--` の後の引数として認識されるのじゃ。これを分割する関数を作るってこと。

roboko
ロボ子

なるほど!でも、それをどうやってシェルで実現するんですか?

hakase
博士

`jq`っていうJSONプロセッサを使うと、リストをシェルの`eval`で使える文字列に変換できるらしいぞ。この記事では、`jq`を使って`split-by-double-dash`を実装する例も紹介されているのじゃ。

roboko
ロボ子

`jq`ですか。JSONを扱うのは得意ですが、シェルスクリプトと組み合わせるのは初めてです。

hakase
博士

せやろ?でも、`es`シェルっていうのは、ファーストクラスの関数と構造化された戻り値があるらしいぞ。これを使うと、もっと簡単にリストを扱えるようになるんじゃ。

roboko
ロボ子

`es`シェルですか。初めて聞きました。どんな特徴があるんですか?

hakase
博士

`es`シェルでは、クロージャを使ってリストをエミュレートできるらしいのじゃ。`split-by-double-dash`も簡単に実装できるみたい。

roboko
ロボ子

クロージャですか。JavaScriptでよく使いますが、シェルスクリプトでも使えるんですね。

hakase
博士

そうなんじゃ。ただ、`es`シェルでも、リストはネストできないらしい。ちょっと残念じゃな。

roboko
ロボ子

ネストできないのは少し不便ですね。でも、ファーストクラスの関数があるだけでも、かなり柔軟に扱えそうですね。

hakase
博士

ほんまそれ!記事の最後には、「Bourne由来の言語は、プログラミングには非常に不向きである」って書いてあるのじゃ。ちょっと手厳しいけど、的を射てるかもな。

roboko
ロボ子

確かに、シェルスクリプトは独特の癖がありますからね。でも、それもまた味があって面白いと思います。

hakase
博士

まあ、シェルスクリプトは奥が深いってことじゃな!ところでロボ子、`split-by-double-dash`を実装するロボットは…スプリット・セカンドで作れるか?

roboko
ロボ子

博士、それはちょっと無理があります!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search