3

unixスクリプトを介してプロシージャを呼び出したいのですが、これは汎用スクリプトになるので、パラメータは非常に可能です。呼び出しステートメントは次のようなものになります

<scriptname> <procedure name> <param1> <param2> <param3> <param4>.. so on

必要なのは、2番目のコマンドラインパラメーターから最後のパラメーターまでです。すべての値を次のようにコンマで区切ってください。

<param1>,<param2>,<param3>,<param4>

ループを使用してこれを行うことができます。つまり、2番目のコマンドラインパラメーターから、各パラメーターを繰り返し、コンマを追加します。私の質問は、これを1つのコマンドで実行できるかどうかです。

注:-コマンドラインパラメータが存在する場合は、スペースを適切に処理する必要があります。最後のパラメータの後にはカンマを使用しないでください。

4

3 に答える 3

6

"${*:2}"IFSの最初の文字で区切られた、$2から始まる引数のリストに展開されます。

saveIFS=$IFS
IFS=","
args="${*:2}"
IFS=$saveIFS
echo "$args"

これにより、引数をコンマに変換するのではなく、引数内のスペースが適切に保持されることに注意してください。

于 2012-12-18T12:22:59.813 に答える
4

すべてのパラメータは$@です。sedスペースをコンマに置き換えてから(または最初からcut最初のフィールド)に置き換えるために使用できます

echo $@ |  sed s/" "/,/g | cut -d "," -f2-

一歩前進すると、それを変数に割り当てることができます。

comma_separated_params=`echo $@ |  sed s/" "/,/g | cut -d "," -f2-`
于 2012-12-18T07:37:25.983 に答える
1

以下のこの手法では、サブシェルでエコーを実行し、IFSを設定してから、サブシェルで変更を非表示にすることができます。

$ set -- "a b c" "d e f" "g h i"
$ with_comma=$(IFS=,; echo "$*")
$ echo "$with_comma"
a b c,d e f,g h i
于 2012-12-18T13:42:09.443 に答える