最常用、最可靠的方法是使用 ${#array[@]} 语法,它返回已赋值元素个数,支持索引与关联数组,稀疏数组也准确计数,空数组返回0,且无需判空。

在 Linux Shell 中统计数组元素个数,最常用、最可靠的方法是使用 ${#array[@]} 语法。
用 ${#array[@]} 获取数组长度
这是 Bash 和大多数现代 Shell(如 zsh)支持的标准写法,适用于索引数组和关联数组(Bash 4.3+):
-
${#arr[@]}:返回数组中当前所有有效元素的个数(包括空字符串和稀疏索引中的“空位”不计,只计已赋值的元素) -
${#arr[*]}效果相同,但推荐用@,语义更清晰且兼容性更好 - 即使数组是稀疏的(例如
arr[0]=a; arr[5]=b),${#arr[@]}仍返回 2,不是最大下标+1
注意常见误区
别混淆以下几种写法:
-
${#arr}或${#arr[0]}:只统计第一个元素的字符串长度,不是数组长度 -
${#arr[@]:0}:语法错误,不能这样用;切片写法${arr[@]:0:2}是取前两个元素,但长度需再套一层${#...} - 对未声明或为空的数组,
${#arr[@]}安全返回 0,无需额外判空
实际使用示例
你可以直接在脚本中这样写:
arr=("apple" "banana" "cherry")
echo "元素个数:${#arr[@]}" # 输出:3
<h1>动态添加后重新统计</h1><p>arr+=("date")
echo "添加后:${#arr[@]}" # 输出:4</p><h1>空数组</h1><p>empty=()
echo "空数组:${#empty[@]}" # 输出:0</p>兼容旧 Shell 或特殊场景的备选方法
如果在极老的 Shell(如 dash)中运行,它不支持数组,此时应避免使用数组;若必须统计类似结构,可用字符串分割模拟,但本质已不是数组操作。Bash 用户无需考虑此情况。











