問題タブ [getopt-long]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
perl - Perl Getopt::Long の不明なオプション
Getopt::Long を使用して未知のオプションをどのように認識できますか?
'<>' を試しましたが、期待どおりに動作しませんでした.次の点を考慮してください:
Unknown option
認識されないオプション (この場合はそれ以外) がある場合にのみ印刷したいと思います--help
。しかし今、ファイル名は認識されないオプションであると考えています..
perl - 別のプログラムに渡すために Getopt::Long で解析された書式設定オプション
Getopt::Long を使用して、プログラムに渡されたオプションを解析しています。これらのオプションを (変更後に) フォーマットして、別のプログラムに渡したいと考えています。
Getopt はこれを行いますか、それとも私のためにこれを行うことができる別のモジュールがありますか?
例:
perl - すべての引数を解析し、ハッシュに保存します
perl スクリプト内で引数名を指定せずに、すべての任意の引数をハッシュに解析するにはどうすればよいですか。
以下の引数を指定してコマンドを実行すると、以下のようなハッシュが得られます。
-arg1=最初 --arg2=2番目 -arg3 -arg4=2.0013 -arg5=100
これは、以下のように Getopt::Long を使用して実現できます。
ただし、引数リストが長すぎるため、GetOptions で引数名を指定したくありません。したがって、パラメーターとしてハッシュのみを指定して GetOptions を呼び出すと、引数が何であるか (およびその型の整数/文字列/浮動小数点数/単一の引数) が特定され、ハッシュが作成されます。
c - getopt_long() にターミネータが表示されない
getopt を使用してオプションを読み取り、残りの argc を繰り返し処理してオプションではない引数を読み取る C プログラムに取り組んでいます。これらのオプションではない引数の一部は数値であり、そのうちのいくつかは負です。よくある問題は、私は知っており、オプションの終わりとオプションではない引数の始まりの間に「--」ターミネータを配置するだけで修正できることを理解しています。ただし、これは現在のセットアップでは機能しないようです。
オプションおよび非オプションの引数を読み取る私のコードのスニペットは次のとおりです。
関数呼び出しと出力は次のとおりです。
なぜこれが起こっているのか、または修正は何ですか?
command - getopt はあいまいなオプションの引数を検出しません
getopt コマンドを使用するシェル スクリプトを書き留めました。getopt コマンドに提供される長いオプションのリストには、次の 3 つの異なるオプションが含まれます。
スクリプトを実行すると
あいまいなオプション (--local) が明らかに含まれている場合、getopt はそれを「--local-address」とゼロ コードとして返します。
でもやってみたら
ここで getopt はあいまいです。
getopt(1) のマニュアルページに次のように表示されていることを考えると、この動作は奇妙だと思います。
私は何を逃したのですか?
事前にサンクス
PD: RHEL5 でテスト済み
補遺
Jonathan Lefflerの回答を読んだ後、いくつかのテストを試しました。コロンのパターンに注意してください。
2014 年 5 月 26 日の更新 -- getopt_long(3) のテスト
getopt_long(3) 関数をテストするための簡単な C プログラムを作成しました。
私のソース コードでは、getopt_long(3) に渡された構造体「option」の配列に、3 つの長いオプション「xxaaa」、「xxxyy」、および「xxxzz」の定義が含まれています。これらはすべて同じ文字列「xx」で始まります。あいまいなオプションを検出する getopt_long(3) の機能をテストします。
(これらのフィールドの目的の詳細については、getopt_long(3) のマニュアル ページを参照してください)。
"--xx" は候補が 3 つあるのに対し、"---xxx" は 2 つしかないというあいまいなオプションに注意してください。
getopt_long の動作は、「has_arg」と「val」という名前の 2 つの構造体フィールドの値に応じて変化します。
上記の例から:
getopt(1) コマンドは、すべての「ユーザー定義の長いオプション」の「val」フィールドに 2 (ソース コードでは LONG_OPT とラベル付けされています) を割り当てます。このスレッドを開始する場合、「オプション」構造体の配列は次のようになります。
したがって、 getopt(1) があいまいな長いオプションを検出する唯一の方法は、候補が「has_arg」フィールドに異なる値を持つことです。
質問
回避策の提案
Q1 にはまだ回答できないので、getopt(1) コマンドのソース コードを変更して、ユーザー定義の長いオプションごとに「val」フィールドに同じ 2 (LONG_OPT) の値ではなく、異なる値を割り当てるように変更する可能性があると思います。短いオプションの場合、getopt_long(3) は 1 つの ASCII 文字を返すことができるので、それらの値は ASCII マップから外れるはずです -- val >= 256
c - Linux cでgetoptを使用して「--」を制限する方法は?
ユーザーがオプションとして「--」を指定した場合に制限する必要があります。例えば:
エラーをスローする必要があります。解析のためにgetoptを使用しています
getopt を使用してこれを達成する方法
python - python get opt long オプションのみ
getopt を使用して、長いオプションのみでコマンドライン引数から入力を取得したい
例:./script --empid 123
getopt.GetoptError: option --empid not recognised
上記のコードでエラーエラーが発生しています。何がうまくいかなかったのでしょうか?