GitLab中如何将含$特殊字符的变量传递至其他阶段?
GitLab CI 传递含
$字符的变量至其他Stage的正确方法 问题根源
你遇到的问题是因为shell解析双引号包裹的字符串时,会把$trator识别为未定义的变量,直接替换为空,导致最终写入build.env的内容是pass=Admini,而非预期的pass=Admini$trator。
正确解决方案
以下两种方法均可解决该问题:
方法1:用单引号包裹echo输出内容
使用单引号包裹整个echo字符串,shell不会解析其中的$符号:
build: stage: build script: - my_var='Admini$trator' - echo 'pass=$my_var' >> build.env # 单引号避免shell解析$ artifacts: reports: dotenv: build.env test: stage: test needs: - job: build artifacts: true script: - echo $pass
方法2:对变量中的$进行转义(使用$$)
如果需要保留双引号的其他变量解析能力,可将变量里的单个$替换为$$,shell会自动将$$解析为单个$:
build: stage: build script: - my_var='Admini$$trator' # 用$$转义$ - echo "pass=$my_var" >> build.env artifacts: reports: dotenv: build.env test: stage: test needs: - job: build artifacts: true script: - echo $pass
效果验证
两种方法执行后,test阶段的echo $pass都会输出Admini$trator,符合预期。
内容的提问来源于stack exchange,提问作者s.dragos
相关产品推荐
相关产品推荐

