rexkogitans Asked: 2018-01-31 04:26:55 +0800 CST2018-01-31 04:26:55 +0800 CST 2018-01-31 04:26:55 +0800 CST 为什么 wc <<<"$string" 显示的长度比 printf "$string" | 长一个字节 厕所? 772 偶然地,我发现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意义 - 这是一个假定的换行符吗? bash newlines 2 个回答 Voted Best Answer Stephen Kitt 2018-01-31T04:30:21+08:002018-01-31T04:30:21+08:00 差异是由添加到此处字符串的换行符引起的。请参阅Bash 手册: 结果以单个字符串的形式提供,并附加换行符,在其标准输入(或文件描述符n,如果指定了n)上的命令。 wc以相同的方式计数,但其输入不同。 Murphy 2018-01-31T04:31:04+08:002018-01-31T04:31:04+08:00 这是由 here-string 重定向器添加的后续换行符: $ 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
差异是由添加到此处字符串的换行符引起的。请参阅Bash 手册:
wc
以相同的方式计数,但其输入不同。这是由 here-string 重定向器添加的后续换行符: