我试图在shell脚本中将一些十六进制值编码为base64.
nmurshed@ugster05:~$ echo -n "1906 1d8b fb01 3e78 5c21 85db 58a7 0bf9 a6bf 1e42 cb59 95cd 99be 66f7 8758 cf46 315f 1607 66f7 6793 e5b3 61f9 fa03 952d 9101 b129 7180 6f1d ca93 3494 55e0 0e2e" | xxd -r -p | base64
GQYdi/sBPnhcIYXbWKcL+aa/HkLLWZXNmb5m94dYz0YxXxYHZvdnk+WzYfn6A5UtkQGxKXGAbx3K
kzSUVeAOLg==
Run Code Online (Sandbox Code Playgroud)
76个字符后我得到一个自动换行,有没有办法避免这种情况?
在网上我发现,使用"-n"忽略新行...有人可以提出建议吗?
Cha*_*ffy 17
echo -n实际上并不无论这里:它控制是否有来自输出一个换行符echo,但能否echo发出的换行是否没有关系xxd或base64发出换行符.
因为xxd忽略输入中的任何尾随换行符,echo或者echo -n在此处行为完全相同; 是否有换行echo没有区别,因为换行(如果存在)将xxd在读取其输入时消耗.相反,你最终关心的是输出base64,这是产生你的最终结果的原因.
假设您有GN64版本的base64,添加-w 0以禁用其输出中的换行.从而:
printf '%s' "1906 1d8b fb01 3e78 5c21 85db 58a7 0bf9 a6bf 1e42 cb59 95cd 99be 66f7 8758 cf46 315f 1607 66f7 6793 e5b3 61f9 fa03 952d 9101 b129 7180 6f1d ca93 3494 55e0 0e2e" \
| xxd -r -p \
| base64 -w 0
Run Code Online (Sandbox Code Playgroud)
小智 5
我有一个类似的问题,
var1=$(echo -n "$USER:$PASSWORD" | base64)
导致错误的base64编码值,该值在脚本的下一步中无法使用,使用了printf,并且工作正常。这是我的代码:
var1=$(printf "%s" "${USER}:${PASSWORD}" | base64)
Run Code Online (Sandbox Code Playgroud)