最常用方法是${#variable}语法:str="hello world"时${#str}输出11,空字符串或未定义变量均输出0;支持命令替换如${#$(date)}和带引号拼接${#"hello $user"};注意中文按字符数统计、数组用${#arr[0]}取元素长度。

在Linux Shell中,获取字符串长度最常用的方法是使用 ${#variable} 语法。
用 ${#var} 直接获取长度
这是最简洁、最标准的方式,适用于所有 POSIX 兼容的 Shell(如 bash、zsh、dash)。
- 变量已定义时:str="hello world"; echo ${#str} → 输出 11
- 空字符串:str=""; echo ${#str} → 输出 0
- 未定义变量:echo ${#undefined} → 输出 0(不会报错)
对命令结果或表达式取长度
可以对命令替换或带引号的字符串直接使用 # 操作符:
- echo ${#$(date)} → 获取当前日期字符串长度(如 29)
- echo ${#"Hello $USER"} → 计算拼接后字符串长度(注意必须加双引号)
- 不加引号会出错:${#Hello $USER} 是非法语法,会报错
其他方法(不推荐但可了解)
虽然有替代方式,但它们更繁琐、依赖外部命令或存在兼容性问题:
-
expr length "$str" —— 依赖
expr,且变量必须加双引号,bash 中已过时 -
echo "$str" | wc -c —— 包含换行符,结果比实际多 1,需用
echo -n或wc -m调整 -
${str//?/} 配合
${#...}计数 —— 冗余且低效,仅作技巧演示
注意事项
几个容易踩坑的点要特别留心:
- 中文或 UTF-8 多字节字符:bash 的
${#str}统计的是**字符数**(不是字节数),例如 s="你好"; echo ${#s} 输出 2 - 想获取字节数?用 echo -n "$str" | wc -c
- 数组元素长度:用 ${#arr[0]} 获取第一个元素长度;${#arr[@]} 是数组元素个数,不是字符串长度











