1

スクリプトパラメータを外部プログラム(ksh)に渡そうとすると、奇妙な動作が発生します。

私のセットアップは次のようになります:-私はkshスクリプト(「テスト」と呼ばれます)を持っています。これは要約すると次のようになります:

...
args="$@"
java my_main_class $args
...

-このスクリプトを次のようなもので呼び出すと:

> ./test "param1 param2" param3

...次に、外部アプリケーションは次のパラメーターを確認します:(param1、param2、param3)

  • スクリプトを次のようなものに変更した場合:

    ...
    java my_main_class "$@"
    ...
    

...そして同じ呼び出しを行うと、外部アプリケーションは次のパラメーター(param1 param2、param3)を認識します。これは、パラメーターが正しく認識されることを意味します。

質問:外部プログラムを呼び出す前に、「@ $」を変数に格納したまま、スペースを含むパラメーターを正しく渡すために、スクリプトの最初のバージョンを変更するにはどうすればよいですか?

よろしく、アンドレイ

4

1 に答える 1

1

まず、同じセッションを設定しましょう。

$ set -- "param1 param2" param3
$ echo $1, $2

param1 param2, param3

kshとbashは、配列を割り当てた有効なソリューションを提供します。

$ args=("$@")
$ fake_java() { ( for w; do echo "$w"; done ); }

これは引用符なしでも失敗します:

$ fake_java ${args[@]}

param1

param2

param3

しかし、引用符と配列を組み合わせると、これが機能します。

$ fake_java my_main_class "${args[@]}"

param1 param2

param3

于 2012-11-30T20:54:38.867 に答える