• ベストアンサー

コマンドライン引数のハイフン1つと2つの違い

今作っているプログラムにコマンドライン引数を設定しているのですが、公開するにあたり一般的な形式に揃えようと思って調べています。コマンドライン引数には次のような色々な形式がありますが /arg value -arg value --arg value これらの違いがよく分かりません。おそらくスラッシュ(/arg)とハイフン1つ(-arg)は同じではないかと思うんですが、ハイフン2つ(--arg)は何なのでしょう?指定したか否かだけが問題(値は関係ない)のブーリアン? ご存知の方、ぜひ情報提供お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

主にunix系での話になりますが ・ハイフン一つ argとして1文字ずつが意味を持つ→複数同時指定可能 valueは空白で区切って指定 +argでオプションをoffの意味になる ・ハイフン二つ argは単語、または単語をハイフンで区切ったもの valueは--arg=valueという感じで=で指定 --no-argでオプションをoffの意味になる というのが多いです。 例えば gnu lsだと -r/--reverseで逆順 -R/--recursiveで再帰的にサブディレクトリを表示 -s/--sizeでファイルサイズの表示 となりますが ls -srR と ls --size --reverse --recursive が同じ意味になります。 ただ、全てそうだというわけではなく ・ハイフン一つで複数指定不可 ・ハイフン一つで単語指定のみ ・ハイフン二つ指定が無い ・一文字オプションで小文字がOn,大文字がOff 等いろんなのがあります。 DOSプロンプト用だと/が多いですね。 /arg:valueで値指定、/arg+でOn,/arg-Off というのをよく見掛けます。 が、unix系では/はパスの区切りに使われるので、両方で使えるようなプログラムなら避けた方がいいでしょう。

関連するQ&A

  • コマンドライン引数について

    コマンドライン引数について opencvのサンプルを試しているのですが、困っています。 xcodeでビルドするとビルドは問題ないのですが、実行できない状態のものがあります。実行できないものは「デバックは正常に終了しました」や「ステータス255で終了しました」と出てしまいます。 前回の質問でコマンドライン引数が問題ではないか?とアドバイス頂き、色々と調べたのですが、main関数がコマンドライン引数をとることは理解出来たところで止まっています…。引数の指定の方法がわからず、Terminalから指定しようとexeファイルを開けて入力しようとしてみるのですが「プロセスは完了しました」と出てしまい、入力することができません… このやり方があっているかわからず、混乱しています。もし、検討違いのことを言っていたらすみません。 誰か引数の指定方法についてご存知であれば、アドバイス頂けないでしょうか? よろしくお願い致します。

  • コマンドライン引数を用いて。

    コマンドライン引数を用いて足し算をさせるプログラムです。 class goukei{ public static void main(String args[]){ int i, count; int sum = 0; int a[]; count = args.length; for(i=0; i<args.length; i++){ int arg_i = Integer.parseInt(args[i]); sum = sum + arg_i; } System.out.println("引数の数は" + count); System.out.println("合計は" + sum); } } と考えたのですが、もっとこうしたほうがいいという部分があれば教えてください。 一応これでできているとは思うのですがイマイチ自信がありません・・・。

    • ベストアンサー
    • Java
  • コマンドライン引数

    月の重力を地球の17%とする。 地球出の体重をコマンドライン引数として受け取り、月で量った体重を表示するプログラムを作成したいのですが、わかりません。 参考書等で調べてみると、うけっとった値をそのまま表示する方法は書いてありましたが、それ以外の方法がよくわかりません。 参考サイトがありましたら、同時に教えてもらえると助かります。

    • ベストアンサー
    • Java
  • calc.exeのコマンドライン引数の渡し方

    windows付属の電卓プログラムcalc.exeですが、 コマンドライン引数で値を渡し、計算させて その結果を取得することは可能なんでしょうか?

  • コマンドライン引数って・・・?

    java言語を勉強中です。 コマンドライン引数って何ですか? 検索しても本を読んでもイマイチ理解できません…。 どこの部分に、どの様な形式で記入すればいいのでしょう? またその記入によって何が実行されるのですか? すいませんが、全くの初心者なので分かりやすく説明して 頂けませんか? 宜しくお願いします。

    • ベストアンサー
    • Java
  • コマンドラインってなんですか?

    vbaの事を調べていると、ちらほら「コマンドライン」と言う言葉を見かけますが、 意味がよくわかりません。 コマンドプロンプトならわかります(笑) ググってみたら 「コマンドラインとはプログラムを起動させるときに指定するオプションのようなものです」 とヒットしたのですが、要は引数みたいな感じでしょうか?

  • コマンドライン引数の例外処理について

    整数a、bをコマンドライン引数として受け取るプログラムを作成するとします。この時、入力するコマンドライン引数を整数であるa、b2つのみとします。 次の事柄について教えて下さい。 (1)コマンドライン引数を2個入力しなかった時の例外処理の仕方 (例えば、コマンドライン引数を入力しなかったり3個入力した時) (2)整数のコマンドライン引数を入力しなかった時の例外処理の仕方 (例えば、「abc」などと入力した場合) (3)コマンドライン引数を数の小さいものから入力しなかった時の処理の仕方 (例えば、「3 5」ではなく「5 3」と入力した場合) 初心者なもので…。どなたかお教え下さい。宜しくお願いします。

    • ベストアンサー
    • Java
  • コマンドライン引数

    1~10の整数のコマンドライン引数を受け取り、それと等しい英語及び受け取った引数の数を表示するプログラムを作りたいのですがわかりません。 引数がない場合、1~10以外の整数の場合はエラーメッセージを表示させてプログラムを終了するようにしたいです。 出力する英語の文字列は String 配列に格納するようにします。 実行結果です。 % java englishNum 2 3 1 Two Three One length : 3 % java EnglishNum No Parameter! % java EnglishNum 30 Only 1-10!

    • ベストアンサー
    • Java
  • c# コマンドラインから引数の指定の仕方

    c#を勉強している初心者です。 入門書やネットで検索してもコマンドラインから引数の指定の仕方が わかりません。 次のように書いた後 class CommandLine {    static void Main(string[] args)     {        Console.WriteLine("parameter count = {0}", args.Length);        for (int i = 0; i < args.Length; i++)        {           Console.WriteLine("Arg[{0}] = [{1}]", i, args[i]);        }     } } デバックなしで開始 → 続行するには何かキーを押してください で終わってしまいます。 いつ、どのようにしてコマンドラインから指定(書き込む?)のですか? よろしくお願いします。

  • コマンドプロンプトにおけるコマンドライン引数の展開

    こんにちは。 コマンドプロンプトにおける、コマンドライン引数の展開のされ方について、質問させて下さい。 具体的に言うと、二重引用符で囲まれたコマンドライン引数が、 どのようにして各コマンドに渡されるのかを詳しく知りたいと思っています。 まずコマンドプロンプトが、コマンドラインの特殊文字を展開し、 それらが各コマンドに渡される事は知っています。 特に、2つの二重引用符で囲まれた文字列に含まれる特殊文字は普通の文字として扱われる事、 二重引用符は「\」によってエスケープできる事は知っています。 これらを理解した上で、以下のような事を試しました。 まず、以下のような、1.cというCプログラムを作成し、ビルドしました。 ____________________ #include <stdio.h> int main(int argc,char *argv[]) { int i; for(i=1; i<=9; i++) if(argv[i]) printf("argv[%d]=「%s」\n", i, argv[i]); return 0; } ____________________ 次に以下のようなバッチスクリプトを作成しました。 ____________________ @echo off echo %%~1:「%~1」 echo %%~2:「%~2」 echo %%~3:「%~3」 ____________________ その後、以下のようにして同じコマンドライン引数を、これらのプログラムに渡すと、 以下のような結果になりました。 ____________________ C:\Users\kei >1.exe "\"ab c\"" de argv[1]=「"ab c"」 argv[2]=「de」 C:\Users\kei >1.bat "\"ab c\"" de %~1:「\"ab」 %~2:「c\""」 %~3:「de」 ____________________ なぜ両者の出力結果に、違いが出るのかが分からず困っています。 コマンドプロンプロの仕様だと、1.exeの出力は予想通りだったのですが、 1.batの出力では、コマンドライン引数がスペースで区切られていると、 それらを二重引用符で囲んでも、1つの引数としてみなしてくれませんでした。 これだけでは不十分だと思い、以下のように、 Windowsコマンドではない、ダウンロードしてきたlessと Windowsコマンドであるtypeで、同じ事を試しました。 ____________________ C:\Users\kei >less "\"ab c\"" fa ab c: No such file or directory fa: No such file or directory C:\Users\kei >type "\"ab c\"" fa 指定されたファイルが見つかりません。 処理中にエラーが発生しました: \ab パラメータが間違っています。 ____________________ この結果をみると、lessでは1.exeと同じようにコマンドラインが解釈され、 moreでは1.batと同じようにコマンドラインが解釈されているようです。 こういった事実は 「まずコマンドプロンプトが、コマンドラインの特殊文字を展開し、 それらが各コマンドに渡される」 というコマンドプロンプトの仕様と矛盾しているので、頭が混乱しています。 こういった問題について、何か御存じの方がいらっしゃれば、情報提供をお願い致します。 長くなりましたが、よろしくお願い致します。