暗无天日

=============>DarkSun的个人博客

坑爹的回车

今天尝试自己写脚本调用网易翻译 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  -