フラグとコマンドパラメータを分離します。

フラグとコマンドパラメータを分離します。

次のフラグとパラメータを含むコマンドがあるとします。

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シェルはこのライブラリ関数を呼び出して組み込みコマンドを実装する可能性が高いです。

getoptsIMHO、シェルスクリプトとgetopt()Cプログラムでこれを使用する方法を知っておくとよいでしょう。あまり難しくなく、プロジェクトのコマンドライン解析コードを書くと、作業がはるかに簡単になります。

getopt_long()一部のCライブラリは、--option=value「長いオプション」()を解析する機能も提供しています。しかし、これは拡張です(愚かな意図ではありません)。

答え2

次のことを検討してください。

mycommand --foo=bar arg1 arg2

=<someval>フラグに値を割り当てる際の要件は、これを明確にします。

明らかに、これは値が指定されていない別のケースです。

mycommand --foo arg1 arg2

答え3

これに対する一般的な答えはありません。それはすべてmycommandその主張がどのように解釈されるかに依存します。たとえば、引数の値として決して表示されない限られた数の値のみを許可すると、あいまいさが明確になり、mycommand次のコマンドライン引数が許容可能な値であることを確認して、省略された値を簡単に検出できます。foofoofoo

関連情報