Azure Pipelines中如何设置含引号的管道变量?
Azure Pipelines Bash任务中设置含特殊字符的输出变量问题解决
在基于Ubuntu的微软托管Azure Pipelines Bash脚本任务里,我需要设置可被其他任务调用的管道变量,变量值是类似如下的映射格式:
{ "1.0.0" = "my-function-app-url.com" }
使用以下命令设置变量时总是执行失败,原因是存储在$VALUE中的映射包含双引号,会引发Bash脚本解析错误:
echo "##vso[task.setvariable variable=$KEY;isOutput=true;issecret=true]$VALUE"
我试过用单引号包裹echo的字符串、转义变量内的双引号,甚至尝试移除引号,但要么结果还是失败,要么井号被Bash识别为注释,都没能解决问题。
解决方案
后来排查发现问题根源是字符串包含换行符。处理掉换行之后,只需转义双引号,原有代码就能正常运行:
# 如果值是映射格式... if [[ "$VALUE" == "{"* && "$VALUE" == *"}" ]]; then VALUE=$(echo -n "$VALUE" | tr -d '\n') # 移除换行符,将值转为单行字符串 VALUE=$(echo -n "$VALUE" | sed 's/"/\\"/g') # 转义双引号,让字符串成为有效的JSON格式 fi
内容的提问来源于stack exchange,提问作者ccoutinho
相关产品推荐
相关产品推荐

