在base64中编码时转义换行符

时间:2018-06-01 02:04:47

标签: bash

我有一种情况,在我的BASH脚本中,我需要将环境变量编码为base64并将其写入json文件,然后由docker接收。

我有以下代码:

USER64=$(echo $USER | base64)
echo '{"auths": {"auth": "'"$USER64"'}}' > ~/.docker/config.json

这样可行,但问题是$USER的编码值包含\n,因此echo将其作为2行写入配置文件。如何在编码\n时转义所有$USER并将其写入配置文件?

2 个答案:

答案 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)