[英]Bash for loop iteration with two variables from command substitution
我試圖在 bash 腳本中執行一個 for 循環,我需要傳遞兩個變量。 我目前正在使用下面的 for 循環但沒有成功。
IFS=',' ;for componentId in `echo "${componentIds}"`, packageVersion in `echo "${packageVersions}"`;
do
notes="${saveNotes}"
deployNotes="${saveNotes}"
packageVersion=`echo "${packageVersion}" | xargs`
savePackageVersion="${packageVersion}"
componentId=`echo "${componentId}" | xargs`
saveComponentId="${componentId}"
componentType="${saveComponentType}"
listenerStatus="${saveListenerStatus}"
envId=${saveEnvId}
source bin/createSinglePackage.sh componentId=${componentId} componentType="${componentType}" packageVersion="${packageVersion}" notes="${notes}" extractComponentXmlFolder="${extractComponentXmlFolder}" componentVersion=""
done
所以我想使用命令替換使用 componentId 和 packageVersion 變量迭代上面的 for 循環,其中 ${componentIds} 和 ${packageVersions} 的值已經設置為環境變量。 所以我只是試圖回應它並獲得 output。這些變量的 output 值由分隔,因此 IFS=','
當我執行當前腳本時,它抱怨缺少參數 packageVersion。
任何解決這個問題的建議都會很有幫助,謝謝!!
您可以采用兩種方法:
這兩種方法在下面顯示為 logic_01 和 logic_02:
logic_1()
{
IFS=','
for componentId in `echo "${componentIds}" `
do
for packageVersion in `echo "${packageVersions}" `
do
notes="${saveNotes}"
deployNotes="${saveNotes}"
packageVersion=`echo "${packageVersion}" | xargs`
savePackageVersion="${packageVersion}"
componentId=`echo "${componentId}" | xargs`
saveComponentId="${componentId}"
componentType="${saveComponentType}"
listenerStatus="${saveListenerStatus}"
envId=${saveEnvId}
source bin/createSinglePackage.sh \
componentId=${componentId} \
componentType="${componentType}" \
packageVersion="${packageVersion}" \
notes="${notes}" \
extractComponentXmlFolder="${extractComponentXmlFolder}" \
componentVersion=""
done
done
}
... 或者...
logic_2()
{
packages=( "comp01:vers01" "comp01:vers02" "comp02:vers05" "comp02:vers06" "comp03:vers02" "comp03:vers04" )
for packages in ${packages[@]}
do
componentId=`echo "${packages}" | cut -f1 -d\: `
packageVersion=`echo "${packages}" | cut -f2 -d\: `
notes="${saveNotes}"
deployNotes="${saveNotes}"
packageVersion=`echo "${packageVersion}" | xargs`
savePackageVersion="${packageVersion}"
componentId=`echo "${componentId}" | xargs`
saveComponentId="${componentId}"
componentType="${saveComponentType}"
listenerStatus="${saveListenerStatus}"
envId=${saveEnvId}
source bin/createSinglePackage.sh \
componentId=${componentId} \
componentType="${componentType}" \
packageVersion="${packageVersion}" \
notes="${notes}" \
extractComponentXmlFolder="${extractComponentXmlFolder}" \
componentVersion=""
done
}
這個Shellcheck -clean 代碼說明了一種同時循環兩個逗號分隔列表的方法:
#! /bin/bash -p
componentIds=compid1,compid2,compid3,compid4,compid5
packageVersions=pkgver1,pkgver2,pkgver3,pkgver4,pkgver5
IFS=, read -r -a compids <<<"$componentIds"
IFS=, read -r -a pkgvers <<<"$packageVersions"
for i in "${!compids[@]}"; do
componentId=${compids[i]}
packageVersion=${pkgvers[i]}
printf 'componentId=%q, packageVersion=%q\n' "$componentId" "$packageVersion"
done
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.