Bash で書かれたシェルスクリプトで引数を処理するためには、ビルトインコマンドの getopts
1が使用できますが、このコマンドは --foo
のようなロングオプションをサポートしていません。ロングオプションを GNU の getopt
を持たない macOS などの環境を含めてサポートしたい場合は自前で解析する方法や23、getopts
に -:
を渡して処理する方法45がありますが、この記事では後者の getopts
を使用した方法で、前述のリンク先の手法を参考にしながら、オプションの引数を受けてショートオプションとロングオプションを共通で扱う方法を考えてみます。
ロングオプションの引数
ロングオプションで引数を取るコマンド群には代表的なもので次の種類があります。
--foo=bar
: 区切り文字として =
を使って受け入れる
--foo=bar
のみを受け入れる実装は見当たりませんでした。
この記事の --foo=bar を処理する方法で扱っています。
--foo bar
: 引数を分けて受け入れる
FreeBSD tar、curl、Ruby、Python などで採用されている方式です。
この記事の --foo bar を処理する方法で扱っています。
--foo=bar
と --foo bar
の両方を受け入れる
GNU Coreutils、GNU Grep、Git、Node.js、GNU Awk など多くで採用されている方式です。
この記事の --foo=bar と --foo bar の両方を処理する方法で扱っています。