1

シェルスクリプトでは、以下のようなことを達成したい:

str="india,uk,us,uae"

私はそれを分割し、以下のように各項目を連結し、いくつかの変数に割り当てたい

newstr = '-myParam="india" -myParam="uk" -myParam="us" -myParam="uae"'

以下のように、次のコマンドで上記の連結文字列を使用できるようにします

curl "admin/admin" "localhost" $newstr.

ローカルIFSとforループを使用する方法を見つけましたが、ループ内で更新された変数は、別のbashで実行されるため、ループ外で値を保持していません。

4

4 に答える 4

2

params を配列に読み込みます。

IFS=, read -a params <<< "$str"

そして、それらをループして、コマンドを配列に保存します。

for i in "${params[@]}"; do
   command+=(-myparam=\"$i\")
done

これで、次を使用して展開できますprintf "${command[@]}"

$ printf "%s " "${command[@]}"
-myparam="india" -myparam="uk" -myparam="us" -myparam="uae"

つまり、次のように言わなければなりません。

curl "admin/admin" "localhost" "${command[@]}"

これは、chepner によるこの回答に基づいています:コマンド ライン引数は配列から供給されます。

于 2016-05-19T06:25:53.800 に答える
0

以下のコードは次のようになります。

$ str="india,uk,us,uae"
$ newstr=$(awk 'BEGIN{RS=","}{printf "-myParam=\"%s\" ",$1}' <<<"$str")
$ echo "$newstr"
-myParam="india" -myParam="uk" -myParam="us" -myParam="uae" 

また、新しい文字列をパラメーターとしてcurlに渡すときは、単語の分割とグロビングを防ぐために二重引用符を付けてください。

curl "admin/admin" "localhost" "$newstr"

注: <<< or herestring は、私の記憶が正しければ、いくつかのシェル (Bash、ksh、または zsh) でのみサポートされています。シェルがサポートしていない場合は、echo,pipe組み合わせて使用​​してください。

于 2016-05-19T06:26:11.090 に答える