Bash 在base64中编码时转义换行符

Bash 在base64中编码时转义换行符,bash,Bash,在我的BASH脚本中,我需要将一个环境变量编码为base64,并将其写入一个json文件,然后由docker提取 我有以下代码: USER64=$(echo $USER | base64) echo '{"auths": {"auth": "'"$USER64"'}}' > ~/.docker/config.json 这是可行的,但问题是$USER的编码值包含一个\n,因此echo将其作为两行写入配置文件。如何在对$USER编码时转义所有\n并将其写入配置文件?可以在shell参数展开中

在我的BASH脚本中,我需要将一个环境变量编码为base64,并将其写入一个json文件,然后由docker提取

我有以下代码:

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

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

可以在shell参数展开中使用替换运算符

echo '{"auths": {"auth": "'"${USER64/$'\n'/\\\n}"'}}' > ~/.docker/config.json
但您也可以使用
base64
选项,以防止它首先在编码中添加换行符

USER64=$(echo $USER | base64 --wrap=0)

作为使用
jq
的额外激励,它可以为您执行base64编码:

jq -n --arg u "$USER" '{auths: {auth: ($u | @base64)}}' > ~/.docker/config.json

(据我所知,
@base64
正在处理
$USER
的原始值,而不是JSON编码值)

使用
base64--wrap=0
禁用换行。使用
jq
在shell脚本中创建和解析JSON,而不是用字符串替换。@Barmar base64编码的值具有
\n
,因此我认为
$USER64
的值需要通过转义来更新。所以,
--wrap=0
不会有帮助,对吗?换行符来自自动换行--wrap=0告诉它不要每76个字符换行一次。
USER64=$(echo$USER | base64--wrap=0)