shell 在下面的bash命令中,为什么要在输出中附加一个“*”?

q5iwbnjs  于 2023-08-07  发布在  Shell
关注(0)|答案(1)|浏览(96)

当我运行命令$ echo "Hello, World!" | tr -c 'aeiou' '*'时,终端返回*e**o***o*****。在最后一个元音o之后只有4个字符,所以tr应该用*替换每个字符以返回*e**o***o****,但它在输出字符串中添加了一个*,这对我来说似乎不合逻辑。
我也尝试了$ echo "o!" | tr -c 'aeiou' '*',但它仍然返回o**而不是o*
有没有人可以帮我了解一下原因?

a8jjtwal

a8jjtwal1#

echo 'o!'输出三个字符:o!和换行。

$ echo 'o!' | od -t c
0000000   o   !  \n
0000003

字符串
printf 'o!'只输出前两个。

$ printf 'o!' | od -t c
0000000   o   !
0000002


或者,您可以使用tr -c 'aeiou\n' '*'(至少在我的系统上)保留换行。

相关问题