Bash 管道sha256sum和base64

Bash 管道sha256sum和base64,bash,pipe,Bash,Pipe,给出了预期的正确结果:ogm2otc2ztvintqmdqxnwjkztkwokwkngrlzte1zgzimty3ytljodczzmm0ymi4ytgxzzmmfindq4ytkxoa== 或 给出意外的错误结果: password="admin" password_hashed=$(echo -n $password | shasum -a 256 | awk '{print $1}' | openssl base64 -A ) 我需要理解为什么Bash会以这种方式运行,awkor默认为

给出了预期的正确结果:
ogm2otc2ztvintqmdqxnwjkztkwokwkngrlzte1zgzimty3ytljodczzmm0ymi4ytgxzzmmfindq4ytkxoa==

给出意外的错误结果:

password="admin"
password_hashed=$(echo -n $password | shasum -a 256 | awk '{print $1}' | openssl base64 -A )

我需要理解为什么Bash会以这种方式运行,
awk
or默认为
\n
,这就是您正在编码的字符串中包含的内容。。。你需要把它去掉

如果确实要使用
打印
,则需要将ORS更改为空字符串:

OGM2OTc2ZTViNTQxMDQxNWJkZTkwOGJkNGRlZTE1ZGZiMTY3YTljODczZmM0YmI4YTgxZjZmMmFiNDQ4YTkxOAo=
或者您可以使用
printf

password="admin"
password_hashed=$(echo -n "$password" | shasum -a 256 | awk 'BEGIN {ORS=""} {print $1}' | openssl base64 -A)

echo-n
删除尾随的换行符<代码>awk包括一个尾随换行符。为什么要对十六进制文本进行base64编码?好的,那么如何在一行中获得正确的结果呢?(供应商要求,我无法选择)
password="admin"
password_hashed=$(echo -n "$password" | shasum -a 256 | awk 'BEGIN {ORS=""} {print $1}' | openssl base64 -A)
password="admin"
password_hashed=$(echo -n "$password" | shasum -a 256 | awk '{printf "%s",$1}' | openssl base64 -A)