如何在YAML中正确转义&&符号 解决GitLab CI流水线脚本报错问题
正确写法(3种可选,推荐优先用第2/3种)
1. 单引号包裹整行
YAML单引号内除单引号本身外,其余字符无需转义,会原样传递给Shell执行:
script: - '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"'
注意:单引号不会阻止Shell解析字符串内的$NVM_DIR变量,符合使用需求。
2. 无引号直接书写
只要行内容不会被YAML误判为语法结构,可直接不用任何引号:
script: - [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
3. 字面量块(多脚本场景最优)
如果后续还要追加nvm install、nvm use等命令,用|块标量完全不需要考虑任何转义问题:
script: - | [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" nvm install 18 nvm use 18
之前写法的错误原因
- 双引号包裹写法报错:YAML双引号会解析转义序列,
\.不属于YAML支持的合法转义字符,因此直接报「未知转义字符」错误 - 替换
&&为&错误:&是HTML转义符,YAML和Shell都不识别该写法,传递给Shell执行时会直接报语法错误
内容的提问来源于stack exchange,提问作者Boommeister
相关产品推荐
相关产品推荐

