最近我写的 bash 脚本中需要遍历数组,用到了 bash 中的 array[@] 这种语法。
在 Bash shell 脚本中,array[@]
是一种特殊的数组引用语法,它有以下几个重要特点:
基本含义
array[@]
表示引用数组array
的所有元素@
是一个特殊的下标,表示"数组中的所有元素"
与 array[*]
的区别
array[@]
和array[*]
都表示数组的所有元素- 关键区别在于它们在引号中的展开方式:
"${array[@]}"
:每个元素保持独立,即使包含空格也会被正确处理"${array[*]}"
:所有元素合并为一个字符串,用第一个字符的 IFS(内部字段分隔符)连接
使用示例
fruits=("apple" "banana" "cherry")
# 打印所有元素
echo "${fruits[@]}" # 输出:apple banana cherry
# 在引号中使用
for fruit in "${fruits[@]}"; do
echo "$fruit"
done
# 输出:
# apple
# banana
# cherry
带空格的元素处理
当数组元素包含空格时,"${array[@]}"
能正确处理:
files=("file 1.txt" "file 2.txt")
# 正确方式 - 每个元素保持独立
for file in "${files[@]}"; do
echo "$file"
done
# 输出:
# file 1.txt
# file 2.txt
# 错误方式 - 空格会导致元素被拆分
for file in ${files[@]}; do
echo "$file"
done
# 输出:
# file
# 1.txt
# file
# 2.txt
for ... in 介绍
你可能注意到了,这里面用到了 for ... in 这种循环结构。
介绍数组遍历怎么少的了 for ... in 呢
Bash 中的 for...in
循环是一种常用的循环结构,用于遍历一组值或列表中的元素。
for ... in 基本语法
for variable in list
do
commands
done
或者写在一行:
for variable in list; do commands; done
for ... in 使用示例
-
遍历固定列表:
for i in 1 2 3 4 5 do echo "Number: $i" done
-
遍历字符串列表:
for color in red green blue do echo "Color: $color" done
-
使用通配符遍历文件:
for file in *.txt do echo "Text file: $file" done
-
使用命令输出作为列表:
for user in $(cat /etc/passwd | cut -d: -f1) do echo "User: $user" done
-
使用范围表达式:
for i in {1..5} do echo "Number: $i" done
-
带步长的范围表达式:
for i in {1..10..2} do echo "Odd number: $i" done
for ... in 特殊用法
-
遍历位置参数:
for arg in "$@" do echo "Argument: $arg" done
-
遍历数组:
arr=("apple" "banana" "cherry") for fruit in "${arr[@]}" do echo "Fruit: $fruit" done
注意事项
list
中的元素默认以空格分隔- 如果元素包含空格,应该用引号括起来
do
和done
是必须的关键字- 循环变量不需要提前声明
微信赞赏
支付宝赞赏