最近我写的 bash 脚本中需要遍历数组,用到了 bash 中的 array[@] 这种语法。
在 Bash shell 脚本中,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
for ... in 注意事项
list中的元素默认以空格分隔- 如果元素包含空格,应该用引号括起来
do和done是必须的关键字- 循环变量不需要提前声明
本文来自 https://imhuchao.com/2840.html
315

被折叠的 条评论
为什么被折叠?



