2017-02-18 13 views
0

私はこのシンプルなプログラムを動作させようとしていますが、私は何が間違っているのか分かりません。私は問題が私の構文であったかどうかを確認するために新しいファイルを作成しようとしましたが、まだ起こっています。ここにある:私が最初に実際に誰かが自分のコードを見て、何が間違っているのか教えてください。

$ java test * 

と引数と一緒にプログラムを実行し、その後

$ javac test.java 

とを行うことによって、私の端末でこのプログラムを実行しようとしている

public class test { 

    public static void main(String[] args) { 

    String operator = args[0]; 

    switch(operator) { 

    case "*": 
    System.out.println("Hello"); 
    break; 

      } 
     } 
    } 

私はそれ以来何も得られません、何らかの理由がありますか? "*"が "+"に置き換えられたときに動作するようです。私は

$ java test "*" //notice the quotation marks 

を入力した場合

は、私もそれだけでうまくいくことに気づいたのはなぜ括弧なしのアスタリスクは、それがカッコ作品なしの文字列が、「+」であっても動作しませんか?私が紛失しているものはありますか?

+2

[Globbing](https://en.wikipedia.org/wiki/Glob_(プログラミング))。 –

+1

かっこでは、引用符を意味しますか? – River

+0

スイッチの前に 'operator'の値を表示すると、何が起こっているかを見るのに役立ちます。 (Elliotのコメント) – qxz

答えて

2

問題はJavaとは関係ありません。シェルは*文字をファイル名パターンとして扱い、現在のディレクトリ内のすべてのファイルの名前に展開するため、この問題が発生します。

解決方法は、コマンドラインで文字をエスケープすることです。これを解決するためにJavaで行うことは何もありません。


は(POSIX互換シェルの場合)エスケープとして動作する3つの方法があり

java test "*" 
    java test '*' 
    java test \* 

あり、これを行うために、他の曖昧な方法かもしれ....しかし、上記で十分です。

は("*"'*'の違いは、彼らが別のシェル構造物を逃れることである。二重引用符は、単にファイルのパス名の「グロブ」を無効にします。単一引用符もパラメータ置換や他のものを無効にします。)

文字そのかもしれあなたは、コマンドライン引数でそれらを使用する場合にエスケープする必要があることが含まれます:

  • *?[]~{} - グロブで使用される、など
  • $ - パラメータ置換
  • シェルシンボル|&;
  • # - コメント文字
  • バッククォート文字。

シェルのチュートリアルまたはtextbooxを参照するか、使用しているシェルのマニュアルエントリを読んでください。

+0

*をエスケープするとはどういう意味ですか?アスタリスクの? –

関連する問題