0

パラメータを取り込んでチェックし(「オプション」であり、空の場合はデフォルト値を設定するため)、サーバー上のJavaクラスに渡す短いシェルスクリプトを作成しました。基本的に、そのように:

x=${2:-'Default'}
y=${3:-'Default Name Has Spaces'}
echo \"$x\"
echo \"$y\"
java -d64 -ms3G -mx3G -cp example.jar -Djava.security.policy=policy com.example.JavaClass $1 \"$x\" \"$y\"

ただし、シェルがJavaクラスを呼び出すと、(上記のデフォルトが使用されている場合)「引数名が認識されない」というメッセージが返されます。

3行目と4行目の周りのエスケープされた引用符を使用するechoと、変数が正しく設定され、次のようにエコーアウトされていることがわかります。"Default"さらに"Default Name Has Spaces"、Java呼び出しでエスケープされた引用符を使用しても、より多くの変数が渡されているようです。 2つの引数よりもjava -d64 -ms3G -mx3G -cp example.jar -Djava.security.policy=policy com.example.JavaClass $1 Default Default Name Has Spaces"-Javaクラスは合計3つの引数しか期待しないため、失敗したものとして渡されているようです。

引数を正しく渡す理由や方法について誰かが何か考えを持っていますか?

4

1 に答える 1

4

問題は、を引用符で囲むことです。"これにより、引数を引用符で囲むことができなくなります。バックスラッシュを削除するだけで、次のように設定できます。

x=${2:-'Default'}
y=${3:-'Default Name Has Spaces'}
echo "$x"
echo "$y"
java -d64 -ms3G -mx3G -cp example.jar -Djava.security.policy=policy com.example.JavaClass $1 "$x" "$y"
于 2012-10-19T15:37:17.260 に答える