坑爹的回车
今天尝试自己写脚本调用网易翻译 API 进行翻译,结果被 echo 命令产生的回车符害惨了。
比如,要判断一个字符串的长度,我想当然的写成了
function len() { echo "$*"|wc -c }
但是这个产生的结果其实会比实际的长度多1个,就是 echo 命令产生的回车符:
len '123'
4
正确的实现是用 echo 的 -n
选项禁止产生最后的回车
function len() { echo -n "$*"|wc -c } len '123'
3
当然,就取长度来说,最好的方法是直接使用 ${#param}
来获取
function len() { local word="$*" echo "${#word}" } len '123'
3
类似的,用 sha256sum 进行签名时,也犯了这个错误
echo '123' |sha256sum echo -n '123' |sha256sum
181210f8f9c779c26da1d9b2075bde0127302ee0e3fca38c9a83f5b1dd8e5d3b - a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3 -