GNU/Linux >> Linux の 問題 >  >> Linux

オプションをプログラムに渡す:1 つのダッシュと 2 つのダッシュの規則は何ですか?

最も一般的なのは GNU getopt です スタイル、短いオプションには 1 つのダッシュ、長いオプションには 2 つのダッシュを使用します。

  • 当初、Unix プログラムは 1 文字のオプションの前に 1 つのダッシュを付け、オプションでバンドルするオプションを取りました:

    ls -laF
    
    ls -l -a -F
    

    上記の 2 つのコマンドは同等です。

    オプションが値を取る場合、バンドルをオーバーライドします:gpg -aofoo.gpg-a-o オプションと foo.gpg です -o に与えられた値です .

  • とにかく、彼らのほとんどはそうしました。

    tar cvzf はよくある光景です。現在のバージョンは tar -cvzf を受け入れます また、ダッシュを追加するかどうかによって、引数は非常に異なる方法で解釈されます。たとえば、これら 2 つは同じことを意味します (ダッシュなしのオプションは ではないことに注意してください)。 値の直前):

    tar -xf file.tgz -vzO /etc/passwd /var/backups
    
    tar xfvzO file.tgz /etc/passwd /var/backups
    

    BSD ps 常に - を使用;システムV ps 決してしません。 Linux バージョンは両方のバージョンを受け入れ、オプションの前にダッシュが付いているかどうかに応じて動作を変更します。 (上記の tar の例とは異なり、ps はオプション 意味 を変更します

  • X11 プログラムは、単一のダッシュまたは場合によってはプラス記号の前に長いオプションを使用しました:

    xterm -class FooTerm +vb -u8
    

    これはオプション class を設定します と u8 、および設定解除 vb オプション。

    X11 スタイルは、オプションのバンドルと互換性がありません。

  • その後、長いオプションが GNU getopt() に追加されました。 1 文字のオプションと互換性のある方法で。

    gpg -se --no-armor --output=signed.gpg
    

    これは -s を設定します 、 -e 、および --no-armor (これは --armor の反対です ).

    通常、--output=signed.gpg および --output signed.gpg 同等です。 (ただし常にではありません。たとえば、curl は前者を受け入れず、後者のみを受け入れます。)

    (私の記憶が正しければ、長いオプションは + を使用しました -- に変更される前のプレフィックスとして .)

  • POSIX 仕様には、1 文字のオプションを説明する「ユーティリティ引数構文」セクションがあります。

ほとんどの Windows プログラムは独自のパーサーを使用しており、ユーザーを怒らせています。

  • /a /b /c が必要なものもあります 、その他は VMS スタイルの /a/b/c を許可します 、さらに Unix スタイルの /abc を好む人もいます .
  • ほとんどが / を使用 プレフィックスとして、- を受け入れるものもあります 、他の人はのみ受け入れます - .
  • 値は /foo bar として指定できます 、 /foo=bar/foo:bar .
  • 通常、スペースは /quoted "like this" にすることができます 、ただし、一部のプログラムは " を使用します リテラル文字として。 (これは、プログラムに独自の単語分割を行わせることの欠点です。Unix では、これはシェルによって処理されます。)
  • クロスプラットフォーム プログラムは getopt の実装を使用する場合があります .

一般に、最初の脆弱性は、定着しすぎて変更できない古いプログラムに見られます。この種の長いオプションは、標準の getopt() と互換性がありません 関数。

2 番目のスタイルは GNU getopt_long() によって導入されました。 、および最初のスタイルがバンドルされた短いオプションであることを期待する既存の標準に準拠しています (つまり、 -orange -o -r -a -n -g -e を意味すると予想されます )。この長いオプションのスタイルが強く推奨されます。


Linux
  1. MySQL 5.7 のデフォルトの root パスワードは何ですか?

  2. コマンド プロンプト パラメーターの 1 ダッシュと 2 ダッシュの違いは何ですか?

  3. `bash` のオプションの最後の - (ハイフン) は何を意味しますか?

  1. ENV (“_”) はアンチデバッグのために何をしますか?

  2. 切り取りコマンドの「フィールド」を構成するものは何ですか?

  3. `hostname` のデフォルトのファイルは何ですか?

  1. 初心者に最適なLinuxディストリビューションは何ですか?

  2. ダッシュだけで誤って入力されたcrontab?

  3. Enpass –無料で完璧な1つのパスワードの代替