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

你想要配对您拥有的两个列表,而不是以每种可能的组合将它们组合起来。

一种方法是:

#!/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

相关内容