unn*_*337 4 bash special-characters shell-script base64 wc
我创建了脚本,在那里我用 base64 编码了 28 次字符串。然后我想在输出的字符串中回显字符数。
首先我使用${#var}它给了我 34070。
然后我尝试了相同的字符串
script.sh | wc -c
Run Code Online (Sandbox Code Playgroud)
这给了我 34071。
#!/bin/bash
var="9M"
for i in {1..28};do
var=$(echo $var | base64)
done
echo ${#var}
Run Code Online (Sandbox Code Playgroud)
究竟是什么使这两个输出不同?
正如您在此示例中使用od显示字节的命令所看到的,它打印换行符:
$ echo foo | od -c -b
0000000 foo \n
146 157 157 012
0000004
所以在这种情况下,wc -c以及wc -m计算换行符。
没有换行符:
$ echo foo | od -c -b
0000000 f o o \n
146 157 157 012
0000004
因此,如果您使用echo,请添加该-n选项,使其不打印换行符,或者printf:
$ echo -n foo | od -c -b
0000000 f o o
146 157 157
0000003
Run Code Online (Sandbox Code Playgroud)