コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

アスタリスクを2つ並べる記法(**)をglobstar(グロブスター)と表現することがある

ググりにくいんだけど、あんまり呼称が定着指定ない感じもしたので調べてみた

TL;DR

ディレクトリパスの指定などで ** と書くことがあり、その際の呼称を globstar と記載することがある。なお globstar という呼称で呼ばれるのはbashのオプション名が起源かと思われる。

**が登場するドキュメント

Docker

Dockerの設定としても登場する。

Go 言語の filepath.Match ルールを拡張し、 Docker は特別なワイルドカード文字列 ** もサポートします。これは、(0も含む)複数のディレクトリに一致します。 - Dockerfile リファレンス — Docker-docs-ja 20.10 ドキュメント

GitHub Actions

GitHub Actionsでフィルタパターンとして登場している

ゼロ個以上のキャラクタにマッチしますが、/にはマッチしません。 たとえばOctoはOctocatにマッチします。
・** ゼロ個以上の任意のキャラクタにマッチします。
- GitHub Actionsのワークフロー構文 - GitHub Docs

そもそもglobとは

wikipediaの記述が的確なので転載する。

グロブ(英: glob)とは主にUnix系環境において、ワイルドカードでファイル名のセットを指定するパターンのことである。例えば、UNIXのコマンド「mv .xlsx 営業実績/」はカレントディレクトリから営業実績/ディレクトリへと.xlsxで終わる全てのファイルを移動する。ここで、は「任意の文字列」を表すワイルドカードであり、.xlsxはグロブである。以外に一般的なワイルドカードは疑問符 (?) であり、これは任意の1文字を表す。 - グロブ - Wikipedia

このようにワイルドカードとセットで表現した文字列のことをグロブという。

globstarという呼び方の由来について

紹介したドキュメントで ** という記法は登場するが、大体記号を記載することで説明としては完結するので、ドキュメント上は「globstar(グロブスター)」という表現は登場しない。

そのため明示的に「globstar(グロブスター)」という呼称を使っているものはどこが起源かというところが見当たらないので、少し調べてみた。

** という記法の起源

下記のブログ曰く、 ** という記法は、zshが起源ではないかとされている。

そしてついに Zsh-2.2 の Modification history に、 **/ が出現します。 (中略) 時に、1992/05/14。 ここまでの経緯を見るに、zsh が元祖ではないか?と私には見えました。 -再帰globパターン **/ の元祖は zsh なのか、調べてみた - hkoba blog

しかしながらzshのドキュメントにはglobstarという表現は見当たらない、そこでもう少し追う。

bashでの利用とオプション名としての命名

この **bashで利用したい場合 globstar という名前でオプション指定できるようになっている。

シェル変数「globstar」を有効にすると、「**」によるパス名展開を使用できるようになります。 - 【 shopt 】コマンド(応用編その5)――「**」によるパス名展開を可能にする:Linux基本コマンドTips(366) - @IT

このglobstarオプション自体が(bashに加わったのはversion4で、時系列としては2005年あたりになるが、ざっくり調べて見たがこれ以外にglobstarという表現を使っているケースが無く、おそらくこのbashのオプション表現が呼び名としての起源かと推察される。

参考リンク