我有一种情况,在我的BASH脚本中,我需要将环境变量编码为base64并将其写入json文件,然后由docker接收。
我有以下代码:
USER64=$(echo $USER | base64)
echo '{"auths": {"auth": "'"$USER64"'}}' > ~/.docker/config.json
这样可行,但问题是$USER
的编码值包含\n
,因此echo将其作为2行写入配置文件。如何在编码\n
时转义所有$USER
并将其写入配置文件?
答案 0 :(得分:2)
作为使用jq
的额外动机,它可以为您执行base64编码:
jq -n --arg u "$USER" '{auths: {auth: ($u | @base64)}}' > ~/.docker/config.json
(据我所知,@base64
正在研究$USER
的原始值,而不是JSON编码值。)
答案 1 :(得分:1)
您可以在shell参数扩展中使用替换运算符。
echo '{"auths": {"auth": "'"${USER64/$'\n'/\\\n}"'}}' > ~/.docker/config.json
但您也可以使用base64
选项来阻止它首先将新行添加到编码中。
USER64=$(echo $USER | base64 --wrap=0)