次のフラグとパラメータを含むコマンドがあるとします。
mycommand --foo bar arg1 arg2
(foo
このフラグの値はです"bar"
。)
しかし、foo
引数なしでフラグを提供するオプションがあるとしたらどうでしょうか。
mycommand --foo arg1 arg2
arg1
値がフラグとして扱われないようにするにはfoo
?
ベストアンサー1
Unixでコマンドラインフラグを残りの引数と区別する最も一般的なイディオムは、二重ダッシュ(--
)を使用することです。
ユーティリティがCライブラリ機能をgetopt()
(直接または間接的に)使用している場合、デュアルダッシュはコマンドラインオプションの終わりを示し、getopt()
コマンドライン解析を終了します。
これはから来たものですgetopt(3)
手動OpenBSDから:
引数リストのオプション解釈は、「--」(二重ダッシュ)オプションを使用して抑制できます。これはgetopt()が引数処理終了信号を送り、-1を返すようにします。
そのため、名前付きファイルを削除する正しい方法は次のとおり-f
です。
$ rm -- -f
例えば。
getopts
シェルはこのライブラリ関数を呼び出して組み込みコマンドを実装する可能性が高いです。
getopts
IMHO、シェルスクリプトとgetopt()
Cプログラムでこれを使用する方法を知っておくとよいでしょう。あまり難しくなく、プロジェクトのコマンドライン解析コードを書くと、作業がはるかに簡単になります。
getopt_long()
一部のCライブラリは、--option=value
「長いオプション」()を解析する機能も提供しています。しかし、これは拡張です(愚かな意図ではありません)。