シェルでコマンドの引数にハイフン2個(--)は何?

とあるサービスの起動スクリプトで、

if expr -- "${HOGE__ARGS[*]}" : '.*setuid.*' >/dev/null

といったものを見て、これ何だっけ?となったのでメモ。


これはgetoptの引数解析の仕様。

getoptのmanによると、以下のようにある。

"--" は特殊な引き数で、スキャンのモードによらず、 オプションのスキャンを強制的に終了させる。

ja.manpages.org

つまり、引数解析の終わりを示す。(これより先はオプションではない、と明示するもの)

ここでの「--」の役割は、 "${HOGE__ARGS[*]}" がハイフンから始まる場合に、exprコマンドの引数でない事を保証するためと思われる。

ただ、exprコマンドで - から始まる引数は、「--help, --version」ぐらいに思えるので、どれほど意味があるのかは謎のまま(´・ω・`)