我正在尝试将一些十六进制值编码为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==
在76个字符之后我得到一个自动新行,有没有办法避免这个?
在线我发现,使用" -n"忽略新线......任何人都可以提出建议吗?
答案 0 :(得分:16)
echo -n
在这里实际上并不重要:它控制来自echo
的输出是否有换行符,但echo
是否发出换行符与{{1}是否无关}或xxd
发出换行符。
由于base64
忽略了输入中的任何尾随换行符,因此xxd
或echo
的行为完全相同; echo -n
之间是否有新行没有区别,因为新行(如果存在)将在echo
读取其输入时消耗。相反,你最终关心的是xxd
的输出,这是产生你的最终结果的。
假设您拥有base64的GNU版本,请添加base64
以禁用其输出中的换行。因此:
-w 0
答案 1 :(得分:3)
我有一个类似的问题
var1=$(echo -n "$USER:$PASSWORD" | base64)
导致错误的base64编码值,该值在脚本的下一步中无法使用,使用printf可以正常工作。这是我的代码:
var1=$(printf "%s" "${USER}:${PASSWORD}" | base64)