Bash で書かれたシェルスクリプトで引数を処理するためには、ビルトインコマンドの getopts 1が使用できますが、このコマンドは --foo のようなロングオプションをサポートしていません。ロングオプションを GNU の getopt を持たない macOS などの環境を含めてサポートしたい場合は自前で解析する方法や23getopts-: を渡して処理する方法45がありますが、この記事では後者の getopts を使用した方法で、前述のリンク先の手法を参考にしながら、オプションの引数を受けてショートオプションとロングオプションを共通で扱う方法を考えてみます。

ロングオプションの引数

ロングオプションで引数を取るコマンド群には代表的なもので次の種類があります。

--foo=bar: 区切り文字として = を使って受け入れる

--foo=bar のみを受け入れる実装は見当たりませんでした。
この記事の --foo=bar を処理する方法で扱っています。

--foo bar: 引数を分けて受け入れる

FreeBSD tarcurlRubyPython などで採用されている方式です。
この記事の --foo bar を処理する方法で扱っています。

--foo=bar--foo bar の両方を受け入れる

GNU CoreutilsGNU GrepGitNode.jsGNU Awk など多くで採用されている方式です。
この記事の --foo=bar と --foo bar の両方を処理する方法で扱っています。