Github Actions拼接环境变量出现冗余空格的问题排查与解决
问题原因与修复方案
冗余空格产生的原因
- Base64工具的默认换行行为:GNU
base64工具遵循RFC 4648规范,默认会在编码后的每76个字符后插入换行符,导致生成的AUTH_TOKEN变量包含换行。 - Shell变量展开的空白符处理:使用
echo $AUTH_TOKEN写入文件时,未给变量添加双引号,Shell会将变量中的换行符、制表符等空白符统一替换为单个空格,最终写入文件的Base64字符串就出现了冗余空格。
修复方法
方法1:编码时直接禁用换行(推荐)
在base64命令中添加-w 0参数,强制输出无换行的Base64字符串:
run: | export "AUTH_TOKEN=$(echo -n "${MONGODB_USERNAME}:${MONGODB_PASSWORD}" | base64 -w 0)" echo "$AUTH_TOKEN" >> temp cat temp
注:
-w 0是GNUbase64的参数,Ubuntu等基于Debian的系统默认支持。
方法2:写入文件时保留原始格式
如果需要保留Base64的换行格式(部分场景要求),给echo的变量添加双引号,避免Shell替换空白符:
run: | export "AUTH_TOKEN=$(echo -n "${MONGODB_USERNAME}:${MONGODB_PASSWORD}" | base64)" echo "$AUTH_TOKEN" >> temp cat temp
若后续需要无换行的字符串,可额外处理:
cat temp | tr -d '\n' > temp_no_newline
另外,解码结果末尾的%符号并非解码内容本身,是Zsh在输出无换行的内容后显示的提示符,修复空格后该现象会自动消失。
内容的提问来源于stack exchange,提问作者mykhailo.vz
相关产品推荐
相关产品推荐

