echo造成的base64结果错误

问题描述

原始字符串为 mcinventoryv4er9ll1!ss,使用如下方式在命令行直接编码

echo 'mcinventoryv4er9ll1!ss' | base64

得到的结果是

bWNpbnZlbnRvcnl2NGVyOWxsMSFzcwo=

而正确的编码结果应该是

bWNpbnZlbnRvcnl2NGVyOWxsMSFzcw==

问题原因

经过尝试,可能是由于字符串末尾不可见的换行字符造成的问题。也是因为不同版本 echo 的实现造成的。

解决方法

直接在命令行编码的时候,使用

echo -n 'mcinventoryv4er9ll1!ss' | base64

即可得到正确的编码结果。

或者使用

printf 'mcinventoryv4er9ll1!ss' | base64

即可得到正确的编码结果。

另外,在这篇文章中,还提到了各种 shell 背后的引用会造成的其他问题。

因此建议使用行为更加稳定的 printf 来进行字符串的编码操作。