为什么 wc

为什么 wc

无意中,我发现wc根据从 bash 获取输入的方式不同,计数也不同:

$ s='hello'
$ wc -m <<<"$s"
6
$ wc -c <<<"$s"
6
$ printf '%s' "$s" | wc -m
5
$ printf '%s' "$s" | wc -c
5

这是 - 恕我直言令人困惑 - 行为记录在某处吗?这里算什么wc——这是一个假定的换行符吗?

答案1

差异是由添加到此处字符串的换行符引起的。看Bash 手册:

结果以单个字符串的形式提供给标准输入(或文件描述符)上的命令,并附加换行符n如果n已指定)。

wc计数方式相同,但输入不同。

答案2

这是由此处字符串重定向器添加的后续换行符:

$ s="hello"
$ hexdump -C <<<"$s"
00000000  68 65 6c 6c 6f 0a                                 |hello.|
00000006
$ printf "$s" | hexdump -C
00000000  68 65 6c 6c 6f                                    |hello|
00000005

相关内容