bash数组定义必须用圆括号,含空格字符串需加引号;${arr[@]}按元素传参,${arr[*]}拼接为单字符串;取长度用${#arr[@]},删元素用unset而非赋空值。

数组定义必须用括号,空格分隔元素
直接写 arr=1 2 3 会报错:bash 把 2 当作命令、3 当作参数。正确写法是加圆括号:arr=(1 2 3)。字符串含空格时必须加引号:names=("Alice Smith" "Bob Jones"),否则 Alice Smith 被拆成两个元素。
${arr[@]} 和 ${arr[*]} 的行为差异很关键
两者都返回全部元素,但用途完全不同:
-
${arr[@]}把每个元素当作独立参数,适合循环或传给命令:for name in "${arr[@]}"; do echo "$name"; done -
${arr[*]}把所有元素拼成单个字符串(用第一个字符连接,默认是空格),echo ${arr[*]}看着一样,但一旦元素含空格或特殊字符,就会出错 - 不加引号直接用
$arr或${arr}只取第一个元素,容易误判
获取长度用 ${#arr[@]},别用 ${#arr[*]}
${#arr[@]} 返回真实元素个数,安全可靠;${#arr[*]} 虽然多数时候结果相同,但在某些旧 shell 版本或特殊配置下可能不一致。更隐蔽的问题是:${#arr}(没带 [@])只返回第一个元素的字符长度,不是数组长度。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 错误示例:
files=(a.txt "b c.txt"); echo ${#files}输出5(a.txt长度),不是2 - 正确写法始终是:
echo ${#files[@]}
删除元素必须用 unset arr[i],不能赋空值
写 arr[2]="" 并不会删掉索引 2 的元素,只是把它设为空字符串,${#arr[@]} 仍计为一个元素,${arr[@]} 里还会出现空项。真正删除要用 unset:
-
unset arr[2]:删指定索引 -
unset arr:删整个数组 - 删完后索引不自动重排,
arr[0] arr[1] arr[3]是合法状态
数组稀疏性常被忽略——它不是 bug,是 Bash 的设计特性,但后续遍历时若依赖连续索引(比如 for ((i=0; i),可能跳过 unset 掉的位置。










