Bash 在base64中编码时转义换行符
在我的BASH脚本中,我需要将一个环境变量编码为base64,并将其写入一个json文件,然后由docker提取 我有以下代码: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参数展开中
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)