Forループの問題が出力されています。

Forループの問題が出力されています。
for a in {P02183606,P02183608,sassa}
do
    for b in {PID,PID2,sas}
    do
        echo "http://indiafirstlife.com//onlineInsurance-rest/uploadDocument/uploadDocumentsOmniMannualPush?applicationRefNo=$a&applicationFormId=$b"
    done
done

期待される出力

http://indiafirstlife.com//onlineInsurance-rest/uploadDocument/uploadDocumentsOmniMannualPush?applicationRefNo=P02183606&applicationFormId=PID
http://indiafirstlife.com//onlineInsurance-rest/uploadDocument/uploadDocumentsOmniMannualPush?applicationRefNo=P02183608&applicationFormId=PID2
http://indiafirstlife.com//onlineInsurance-rest/uploadDocument/uploadDocumentsOmniMannualPush?applicationRefNo=sassa&applicationFormId=sas

答え1

欲しいペア可能なすべての組み合わせに結合する代わりに、2つのリストがあります。

1つの方法は次のとおりです。

#!/bin/sh

set -- P02183606 P02183608 sassa

for formid in PID PID2 sas; do
    printf '...urlpath...?applicationRefNo=%s&applicationFormId=%s\n' "$1" "$formid"
    shift
done

これにより、位置パラメータが参照番号のリストに設定され、フォームIDが繰り返されます。各反復でURLが印刷され、これらのパラメータはを使用して挿入され、printf最初shiftの位置パラメータはループの末尾からリストから削除されます。

中かっこ拡張は単に単純なリストを表現するためのものではありません。

答え2

配列を使用して下さい:

a=(P02183606 P02183608 sassa)
b=(PID PID2 sas)

for i in "${!a[@]}"; do
    printf 'http://...?applicationRefNo=%s&applicationFormId=%s\n' "${a[$i]}" "${b[$i]}"
done

代替、単純さprintf:

arr=(P02183606 PID P02183608 PID2 sassa sas)

printf 'http://...?applicationRefNo=%s&applicationFormId=%s\n' "${arr[@]}"

配列でもありません:

printf 'http://...?applicationRefNo=%s&applicationFormId=%s\n' P02183606 PID P02183608 PID2 sassa sas

関連情報