2012-05-14 20 views
3

私は、Javaクラスを呼び出すためのスクリプトrun.sh以下を書かれている:ここでシェルスクリプトとJavaパラメータ

java -cp . Main $1 $2 $3 $4 

は私のJavaクラスは、(それだけで引数を表示する)です:

public class Main { 
    public static void main(String[] args) { 
     for (String arg : args) { 
      System.out.println(arg); 
     } 
    } 
} 

スペースを含むパラメータを渡そうとしない限り動作します。たとえば:

./run.sh This is "a test" 

が表示されます。

This 
is 
a 
test 

どのように私は私のシェルスクリプトを変更および/または「テスト」パラメータをそのまま渡すために私のパラメータの構文を変えることができますか?

このよう

答えて

7

:あなたは、同様のスクリプトですべてのパラメータをマスクする必要があり

java -cp . Main "[email protected]" 
+2

それを呼び出します。これはかなり工夫された例です。それはまさに彼が最後にやりたいことではないかもしれません。 –

+0

http://wiki.bash-hackers.org/syntax/shellvars#special_parameters –

+0

@user:誰によるか? –

3

java -cp . Main "$1" "$2" "$3" "$4" 

今、パラメータ4が空になり、および$ 3は、 "テスト" でなければなりません。確認するには

、試してみてください。

#!/bin/bash 
echo 1 "$1" 
echo 2 "$2" 
echo 3 "$3" 
echo 4 "$4" 
echo all "[email protected]" 

と*それが動作する理由を説明した*場合、それが役立つかもしれない

./params.sh This is "a test" 
1 This 
2 is 
3 a test 
4 
all This is a test 
+0

Javaプログラムが間違った数のパラメータを受け取るため、パラメータ4が空の文字列であるという事実は面倒です(ユーザが3を渡している間に4回)。とにかく、イグナシオの答えがよかったと思う。 –

+0

@SuperChafouin:ああ、私のテストは正確ではなかった。私は "$ @"がテストの出力を見てからマスキングを消費すると思っていましたが、Javaプログラムのように引用符を消費するのは最後のエコーです。 –

関連する問題