Azure Pipelines变量间接引用报错,求正确实现语法
Azure Pipelines 实现变量嵌套引用的正确语法
本地Bash脚本中可以通过${!var1}的间接扩展语法,动态获取拼接后的变量名对应的实际值,示例代码如下:
#!/bin/bash customer=google environment=preprod android_google_preprod_account_activation_url=preprod.google.com echo "Customer is $customer" echo "Environment is $environment" var1=android_${customer}_${environment}_account_activation_url echo "variable is $var1" echo "original value is ${!var1}"
但在Azure Pipelines YAML配置中,使用$(!var1)尝试实现相同逻辑时,会报"invalid indirect expansion"错误:
parameters: - name: customer displayName: 'select customer' type: string values: - google - name: environment displayName: 'select environment' type: string values: - preprod variables: - group: android-${{ parameters.customer }}-${{ parameters.environment }} - name: var1 value: android-${{ parameters.customer }}-${{ parameters.environment }}-account-activation-url steps: - script: | echo "Customer is $(customer)" echo "Environment is $(environment)" echo "variable is $(var1)" echo "original value is $(!var1)" displayName: 'echo variables'
以下是两种可行的解决方案:
方案一:使用Bash原生间接扩展语法
Azure Pipelines的运行时脚本中,$(var1)会被替换为变量的实际值,我们可以将其赋值给Bash本地变量,再用Bash的间接扩展${!var_name}获取目标变量的值:
steps: - script: | # 将Azure Pipelines变量值赋值给Bash本地变量 target_var=$(var1) # 使用Bash间接扩展获取对应变量的实际值 echo "original value is ${!target_var}" displayName: 'echo variables'
注意:如果变量组中的变量名包含横线,Azure Pipelines会自动将其转换为大写+下划线格式的环境变量(例如android-google-preprod-account-activation-url会变成ANDROID_GOOGLE_PREPROD_ACCOUNT_ACTIVATION_URL),此时需要先转换变量名格式再进行间接扩展:
steps: - script: | target_var=$(var1) # 转换为Azure Pipelines环境变量的命名格式 env_var_name=$(echo "$target_var" | tr '-' '_' | tr '[:lower:]' '[:upper:]') echo "original value is ${!env_var_name}" displayName: 'echo variables'
方案二:使用Azure Pipelines编译时表达式解析
如果var1的值是在编译阶段就能确定的(例如通过parameters拼接生成),可以直接使用Azure Pipelines的变量索引语法,在编译阶段就解析出目标变量的值:
steps: - script: | echo "original value is ${{ variables[variables.var1] }}" displayName: 'echo variables'
这种方法无需依赖Bash的特性,直接在Azure Pipelines的编译阶段完成变量替换,运行时直接输出结果,效率更高。
内容的提问来源于stack exchange,提问作者Abdul Majeed
相关产品推荐
相关产品推荐

