在我的 Gitlab 專案中,我設定了 Gitlab 變數MY_VAR_DEV和MY_VAR_PROD.
根據提交分支,根據以下代碼,我希望在 CI/CD 管道(.gitlab-ci.yml 檔案)上有不同的行為:
- if [ $CI_COMMIT_BRANCH == "dev" ]; then export ENV="DEV"; fi
- if [ $CI_COMMIT_BRANCH == "prod" ]; then export ENV="PROD"; fi
- TMP_MY_VAR="MY_VAR_${ENV}"
- export MY_VAR=$( eval echo \$$TMP_MY_VAR )
#- ... bla bla with $MY_VAR use
有沒有辦法合并最后兩行并直接影響MY_VAR評估的值MY_VAR_${ENV}?(我的意思是不使用TMP_MY_VAR)
感謝您的幫助 :)
uj5u.com熱心網友回復:
這不是間接賦值,而是間接取消參考。假設 bash 4.x:
# append all-caps version of CI_COMMIT_BRANCH contents to MY_VAR_prefix
var="MY_VAR_${CI_COMMIT_BRANCH^^}"
# dereference variable created above, assign result to MY_VAR
MY_VAR=${!var}
...當然,你可以把整件事寫成一行:
var="MY_VAR_${CI_COMMIT_BRANCH^^}"; MY_VAR=${!var}
uj5u.com熱心網友回復:
有東西重復自己說一點點。
- if [ "$CI_COMMIT_BRANCH" = "dev" ]; then MY_VAR=$MY_VAR_DEV; fi
- if [ "$CI_COMMIT_BRANCH" = "prod" ]; then MY_VAR=$MY_VAR_PROD; fi
- export MY_VAR
#- ... bla bla with $MY_VAR use
或者
- case $CI_COMMIT_BRANCH in dev) MY_VAR=$MY_VAR_DEV ;; prod) MY_VAR=$MY_VAR_PROD ;; esac
- export MY_VAR
沒有必要使間接引數擴展的問題復雜化,特別是如果您使用的外殼不支持它,而eval.
(除非由您的 shell執行MY_VAR的另一個程式使用,否則不需要匯出。)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/373047.html
