You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash获取数组长度失败:${#args}统计参数数量不符合预期

问题分析与解决

问题原因

你的脚本存在两个关键错误:

  • 数组长度获取语法错误:${#args}并不是获取数组总长度,而是获取数组第一个元素的字符长度。测试中第一个参数是a,长度为1,所以输出param count:1。
  • 数组赋值方式错误:args=(echo $@)会将所有位置参数拼接成一个字符串后再拆分,不仅效率低,还会在参数包含空格、通配符时引发错误拆分的问题。

修正后的脚本

#!/bin/bash
args=("$@")  # 直接将位置参数赋值给数组,保留每个参数的完整性
echo "param count: ${#args[@]}"  # 使用${#args[@]}获取数组总长度
echo "p1,p2,p3,p4,p5: ${args[0]},${args[1]},${args[2]},${args[3]},${args[4]}"

执行效果

执行bash test1.sh a b c d e后,输出会变成:

param count: 5
p1,p2,p3,p4,p5: a,b,c,d,e

补充说明

  • $@代表所有位置参数,用双引号包裹"$@"时,每个参数会被当作独立的数组元素,即使参数包含空格也能正确保留。
  • ${#args[@]}和${#args[*]}都可以获取数组总长度,用于获取长度时效果一致。

内容的提问来源于stack exchange,提问作者Jack Ma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 18:41:26