shell中获取数组所有元素用"${array[@]}"(加双引号确保元素独立),长度用${#array[@]};${arr[@]}不加引号会因空格分割出错,${#arr}仅返回首元素字符数而非数组长度。

Shell 中获取数组所有元素和长度,关键在于区分“数组本身”和“数组展开后的字符串”,以及正确使用语法符号。
获取数组所有元素(保持每个元素独立)
用 "${array[@]}" —— 这是最常用也最安全的方式,双引号确保带空格或特殊字符的元素不被拆分:
arr=("apple" "banana pie" "cherry")-
echo "${arr[@]}"→ 输出:apple banana pie cherry(三个独立参数) - 可用于循环:
for item in "${arr[@]}"; do echo "$item"; done
⚠️ 注意:${arr[*]} 会把所有元素拼成一个字符串(用第一个 IFS 字符连接),一般不推荐用于遍历。
计算数组实际长度(元素个数)
用 ${#array[@]} 或 ${#array[*]} —— 两者结果相同,都返回元素数量:
-
echo ${#arr[@]}→ 输出:3 -
${#arr[0]}是取第一个元素的字符长度,不是数组长度,别混淆 - 空数组:
empty=()→${#empty[@]}返回0
常见误区提醒
以下写法容易出错:
-
${arr[@]}(没加双引号):遇到含空格的元素会被单词分割,破坏结构 -
${#arr}:只等价于${#arr[0]},仅返回首元素字符数 -
$(echo ${arr[@]} | wc -w):错误!会把多个空格、制表符等误算,且无法处理空元素
实用小例子:遍历+计数一体化
想一边打印所有元素,一边知道总个数,可以这样写:
arr=(one "two three" four)len=${#arr[@]}; echo "共 $len 个元素:" ; for i in "${arr[@]}"; do echo "- $i"; done
输出清晰显示总数和每个完整元素,不丢失原始结构。











