Linux中统计字符数时wc -c与${#}的区别是什么?
问题原因解答
差异根源
wc -c统计结果多1的核心原因是 echo 命令的默认输出规则:echo会在你传入的内容末尾自动追加1个换行符(\n,占1个字符长度),两个统计逻辑的本质区别如下:
${#SHELL}是Shell内置的参数扩展语法,统计的是SHELL变量本身存储的原始字符串长度:/bin/bash刚好包含9个字符,没有额外控制字符,所以结果为9。echo $SHELL | wc -c的执行链里,echo先输出$SHELL的内容+末尾换行符,总长度为10,再通过管道传给wc -c;wc -c会统计输入流的所有字符总数,包含这个追加的换行符,所以结果为10。
验证方法
你可以用echo的-n参数取消末尾换行追加,验证统计结果一致:
echo -n $SHELL | wc -c # 输出结果为9,和${#SHELL}统计结果完全匹配
核心差异总结
${#变量名}:仅统计变量存储的原始纯内容的字符长度,不包含任何执行过程中额外追加的控制字符。wc -c:统计输入流中所有字符的总数量,包括换行符、制表符等各类控制字符。
内容的提问来源于stack exchange,提问作者disney82231
相关产品推荐
相关产品推荐

