最直接可靠的方式是用 ${#变量名},这是 shell 内置语法,不依赖外部命令,速度快、无副作用,也正确处理空格、换行符和特殊字符。

最直接可靠的方式是用 ${#变量名},这是 Shell 内置语法,不依赖外部命令,速度快、无副作用,也正确处理空格、换行符和特殊字符。
推荐方法:Shell 参数扩展 ${#str}
这是原生、高效、安全的首选方式:
- 变量必须已定义,否则结果为 0(不会报错)
- 字符串含空格、制表符、中文、emoji 都能准确计数
- 不需要引号包裹变量,但建议用
${str}而非$str,避免因空格导致单词分割 - 示例:str="hello 世界"; echo ${#str} 输出 12(5 英文 + 1 空格 + 4 中文 + 2 字节 UTF-8 编码不影响字符计数,此处按 Unicode 字符计)
兼容性方法:expr length "$str"
适用于较老的 POSIX shell 或需要跨平台脚本时:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 必须对变量加双引号:
expr length "$str",否则空格会引发语法错误 - 支持基本 ASCII,对多字节字符(如中文)也能返回正确字符数(现代 GNU expr 默认按字符而非字节)
- 注意:expr 是外部命令,启动有轻微开销;若
$str以短横线开头(如-abc),需写成expr length -- "$str"避免被误认为选项
管道辅助方法:wc -c 和 wc -L
适合在命令链中临时使用,但要注意细节:
-
echo -n "$str" | wc -c:统计字节数,对 UTF-8 中文会返回字节数(如“中”占 3 字节),不是字符数 -
echo "$str" | wc -L:获取最长行长度,单行字符串下等价于字符数,但自动包含换行符影响需留意 - 务必用
-n抑制 echo 的换行,否则wc -c多算 1
其他可用但不推荐日常使用的方案
如 awk '{print length($0)}' 或 awk -F '' '{print NF}',功能完整但启动开销大;expr "$str" : '.*' 属技巧型写法,可读性差且易出错。这些更适合特定场景调试,非首选。










