Bash 的 Yaml 变量分配问题
Issue With Yaml Variable Assignment With Bash
尝试在 yaml 文件中使用以下语法分配变量时遇到问题。以下代码取自 Define variables 上 了解变量语法 :
部分下的 Microsoft 文档
variables:
- name: one
value: initialValue
steps:
- script: |
echo ${{ variables.one }} # outputs initialValue
echo $(one)
displayName: First variable pass
- bash: echo '##vso[task.setvariable variable=one]secondValue'
displayName: Set new variable value
- script: |
echo ${{ variables.one }} # outputs initialValue
echo $(one) # outputs secondValue
displayName: Second variable pass
具体来说,我发现问题出在语法 '##vso[task.setvariable variable=one]secondValue'
的区域
注意:我没有使用直接写入上面一行的字符串,我使用的是语法为 $variableName
的 bash 变量代替 secondValue
问题是:
variables:
- name: one
value: "initialValue"
steps:
- task: Bash@3
inputs:
targetType: 'inline'
script: |
valueTwo="New Value"
echo '##vso[task.setvariable variable=one]$valueTwo'
displayName: "Change Variable"
- task: Bash@3
inputs:
targetType: 'inline'
script: |
echo $(one)
displayName: "Check Variable Has Changed"
预期输出:New Value
实际输出:$valueTwo
这里调用的参数展开没有在单引号内执行,所以用双引号:
echo "##vso[task.setvariable variable=one]$valueTwo"
尝试在 yaml 文件中使用以下语法分配变量时遇到问题。以下代码取自 Define variables 上 了解变量语法 :
部分下的 Microsoft 文档variables:
- name: one
value: initialValue
steps:
- script: |
echo ${{ variables.one }} # outputs initialValue
echo $(one)
displayName: First variable pass
- bash: echo '##vso[task.setvariable variable=one]secondValue'
displayName: Set new variable value
- script: |
echo ${{ variables.one }} # outputs initialValue
echo $(one) # outputs secondValue
displayName: Second variable pass
具体来说,我发现问题出在语法 '##vso[task.setvariable variable=one]secondValue'
的区域
注意:我没有使用直接写入上面一行的字符串,我使用的是语法为 $variableName
的 bash 变量代替 secondValue
问题是:
variables:
- name: one
value: "initialValue"
steps:
- task: Bash@3
inputs:
targetType: 'inline'
script: |
valueTwo="New Value"
echo '##vso[task.setvariable variable=one]$valueTwo'
displayName: "Change Variable"
- task: Bash@3
inputs:
targetType: 'inline'
script: |
echo $(one)
displayName: "Check Variable Has Changed"
预期输出:New Value
实际输出:$valueTwo
这里调用的参数展开没有在单引号内执行,所以用双引号:
echo "##vso[task.setvariable variable=one]$valueTwo"