为何echo统计变量字符数与${#var}结果不同?Bash脚本疑问
Bash变量字符数计算结果差异解答
问题场景
我正在学习Bash脚本编写,想要获取一个变量的字符数。尝试了两种方法后,结果相差1个字符,具体代码与输出如下:
chars="ABCDEFGHIJKLMNOPQRSTUVWXYZ" echo ${#chars} echo $(echo "$chars" | wc -c)
输出结果:
26 27
差异原因
${#chars}是Bash内置的变量长度计算语法,它直接统计变量chars里的字符总数,这里26个字母就返回26,不会额外统计换行符。echo "$chars" | wc -c这条命令里,echo默认会在输出的字符串末尾自动追加一个换行符(\n),而wc -c统计的是输入中的所有字节数——包括这个额外的换行符,所以结果会比实际字符数多1。
如果想用wc -c得到和内置语法一致的结果,给echo加上-n参数即可,这个参数会禁止echo添加末尾的换行符:
echo $(echo -n "$chars" | wc -c)
此时输出结果就是26。
内容的提问来源于stack exchange,提问作者Jose Cespon
相关产品推荐
相关产品推荐

