Azure CLI自动化更新DevOps Wiki时ETag格式错误求助
解决Azure DevOps Wiki自动化更新中ETag转义问题
问题核心是通过Azure CLI获取的ETag在Bash变量赋值后,传递给更新命令时出现多余转义,导致IfMatch头无效。以下是几种可行的解决方法:
方法1:使用--output tsv获取纯净ETag值
修改ETag获取命令,通过--output tsv参数让Azure CLI直接输出不带JSON引号和转义的原始ETag值:
etag=$(az devops wiki page show \ --path 'my_project - Slab Quality Prediction/test' \ --wiki my_project.wiki \ --query 'eTag' \ --output tsv)
然后在更新命令中用双引号包裹变量,避免Bash分词破坏格式:
az devops wiki page update \ --path 'my_project - Slab Quality Prediction/test' \ --wiki my_project.wiki \ --version "$etag" \ --file-path test.md \ --encoding utf-8
方法2:用sed清理JSON输出的引号
如果不想修改输出格式,可通过sed命令去掉ETag输出前后的JSON外层引号:
etag=$(az devops wiki page show \ --path 'my_project - Slab Quality Prediction/test' \ --wiki my_project.wiki \ --query 'eTag' | sed -e 's/^"//' -e 's/"$//')
同样在更新命令中用双引号包裹变量:
az devops wiki page update \ --path 'my_project - Slab Quality Prediction/test' \ --wiki my_project.wiki \ --version "$etag" \ --file-path test.md \ --encoding utf-8
方法3:用jq解析JSON输出(需提前安装jq)
如果系统中安装了jq工具,可直接解析JSON输出获取原始ETag值:
etag=$(az devops wiki page show \ --path 'my_project - Slab Quality Prediction/test' \ --wiki my_project.wiki \ --output json | jq -r '.eTag')
更新命令同样使用"$etag"传递参数即可。
关键注意点
- 必须用双引号包裹变量:Bash中如果直接使用
$etag,会导致字符串中的空格或特殊字符被分词,破坏ETag的格式;用"$etag"可以完整保留变量的原始内容。 - ETag本身包含双引号:Azure DevOps Wiki的ETag值本身就带有双引号,所以传递时必须完整包含这部分内容,不能额外转义。
内容的提问来源于stack exchange,提问作者Gabriel Lopes
相关产品推荐
相关产品推荐

