0

「$*」を Java コンパイル済みプログラムに渡す際に奇妙な問題が発生しています。次のコマンドラインから変数を渡すと、プログラムは変数を解析しません。

/export/home/checkout>/tmp/jsnmp.sh -f noc2 -t 4,4 -x \"resdiag SilentDiag 1\",18

「/tmp/jsnmp.sh」には以下が含まれます。

#!/bin/sh

$JAVA_HOME/bin/java -jar /export/home/checkout/jsnmp.jar $*

これを実行すると:

$JAVA_HOME/bin/java -jar /export/home/checkout/jsnmp.jar \
     -f noc2 -t 4,4 -x "resdiag SilentDiag 1",18

すべてが機能します。

アイデアはありますか?

4

2 に答える 2

1

おそらく、スクリプト内で引用符を維持したいので、 を使用して"$@"ください。

于 2013-05-01T19:21:45.947 に答える
0

これは Java や Solaris とは関係ありません。これは純粋にシェルのものです。

これは、 $* 置換後、引数が再解析され、別の引数になるためです。たとえば、Java実行可能ファイルはそれを次のように認識します

-f noc2 -t 4,4 -x resdiag SilentDiag 1,18

またはそのようなもの。

次のテスト コードを確認してください。

灰:

echo $1
echo $2
echo $3
./b.sh $*

bsh:

echo b
echo $1
echo $2
echo $3

実行すると、次の出力が生成されます。

$ ./a.sh "1 2" 3
1 2
3

b
1
2
3

最初のスクリプトでは 2 つの引数、2 番目のスクリプトでは 3 つのパラメーターであったことを確認してください。

$* を二重引用符で囲むと、すべての引数が 1 つの引数として送信されるため、役に立ちません。

以下が機能するはずです。

#!/bin/sh

$JAVA_HOME/bin/java -jar /export/home/checkout/jsnmp.jar "$1" "$2" "$3" "$4" "$5" "$6" "$7" "$8" "$9"

ただし、いくつかの最大数の引数があります...

于 2013-05-01T22:09:26.560 に答える