wc -c 和 ${#} 之间的区别?

wc -c 和 ${#} 之间的区别?

我创建了脚本,其中使用 base64 对字符串进行了 28 次编码。然后我想回显输出字符串中的字符计数。

首先我使用${#var}它给了我 34070。

然后我尝试用同一根绳子

script.sh | wc -c

这给了我 34071。

#!/bin/bash
var="9M"
for i in {1..28};do
var=$(echo $var | base64)
done
echo ${#var}

究竟是什么使这两个输出不同?

答案1

正如您在本示例中看到的,使用显示字节的命令od,它会打印换行符:

$ 回声 foo | OD-C-B
0000000 富  \n
        146 157 157 012
0000004

所以在这种情况下,wc -c还要wc -m计算换行符。

没有换行符:

$ echo -n foo | od -c -b
0000000   f   o   o
        146 157 157
0000003

因此,如果您使用echo,请添加该-n选项,这样它就不会打印换行符,或者printf

$ printf "%s" foo | od -c -b
0000000   f   o   o
        146 157 157
0000003

答案2

额外的字符是换行符。如果您这样做,您就可以看到它,例如:

echo $var | hd | tail

相关内容