我创建了脚本,其中使用 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