前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除!
一、简介
Shell 脚本中的数组允许你存储多个值,并可以通过索引访问它们。Shell 中的数组是一维的。
二、声明数组
在Shell中声明普通数组:只能用整数作为数组的索引 ;基本语法如下:
bash
array_name=(value1 value2 value3 ...)
# 普通数组定义:
[root@newrain shell]# books=( linux shell awk sed )
# 引用:
[root@newrain shell]# echo ${books[0]}
linux
[root@newrain shell]# echo ${books[1]}
shell
[root@newrain shell]# echo ${books[2]}
awk
关联数组:可以使用字符串作为数组的索引;基本语法如下:
bash
declare -a array_name
array_name=(value1 value2 value3 ...)
# 关联数组需要提前声明
declare -A myarry1
[root@newrain shell]# declare -A myarry1
[root@newrain shell]# myarry1=([name]=newrain [sex]=man [age]=26)
[root@newrain shell]# echo ${myarry1[name]}
newrain
[root@newrain shell]# echo ${myarry1[age]}
26
三、访问数组元素
使用索引来访问数组中的元素。索引从0开始。
bash
echo "${array_name[0]}" # 输出数组的第一个元素
四、遍历数组
可以使用for循环来遍历数组中的所有元素。
bash
for element in "${array_name[@]}"; do
echo $element
done
五、获取数组长度
Shell中没有内置的数组长度属性,但可以通过以下方式获取:
bash
length=${#array_name[@]}
echo "Array length is $length"
六、多维数组
Shell 不原生支持多维数组,但可以通过一些技巧来模拟:
bash
# 声明
declare -a array_2d
array_2d=([0]="row1col1 row1col2" [1]="row2col1 row2col2")
# 访问
echo "${array_2d[0]}" # 输出 row1col1 row1col2
echo "${array_2d[0][col_index]}"
七、常用数组操作
1、添加元素
bash
array_name+=("new_element")
2、删除元素
bash
unset array_name[index]
3、反转数组
bash
reverse_array=("${array_name[@]}") # 创建副本
reverse_array=( $(echo "${reverse_array[@]}" | rev) )
4、查找元素
bash
index=0
for element in "${array_name[@]}"; do
if [ "$element" == "search_element" ]; then
echo "Found at index $index"
break
fi
((index++))
done
5、排序数组
bash
IFS=$'\n' # 改变内部字段分隔符
sorted_array=( $(sort <<<"${array_name[*]}") ) # 排序
unset IFS # 重置内部字段分隔符
八、shell数组中"*" 和 "@" 区别
bash
"*"当变量加上"" 会当成一串字符串处理.
"@"变量加上"" 依然当做数组处理.
在没有加上"" 的情况下 效果是等效的.
示例
cs
# 声明并初始化数组
my_array=("apple" "banana" "cherry")
# 输出数组元素
for i in "${!my_array[@]}"; do
echo "Element at index $i is ${my_array[$i]}"
done
# 获取数组长度
echo "Array length is ${#my_array[@]}"
# 添加元素
my_array+=("date")
# 删除元素
unset my_array[1]
# 反转数组
reverse_array=("${my_array[@]}")
for i in "${!reverse_array[@]}"; do
echo "${reverse_array[$((${#reverse_array[@]} - 1 - i))]}"
done
# 查找元素
index=0
for element in "${my_array[@]}"; do
if [ "$element" == "banana" ]; then
echo "Banana found at index $index"
break
fi
((index++))
done
# 排序数组
sorted_array=( $(sort <<<"${my_array[*]}") )
echo "Sorted array: ${sorted_array[@]}"
注意事项
- 数组元素中的空格需要用双引号括起来,以避免被拆分。
- 索引操作和遍历时要注意引号的使用,以确保字符串被正确处理。
- 由于Shell的限制,数组操作可能不如其他编程语言直观。
总结
Shell中的数组虽然功能有限,但通过一些技巧和方法,仍然可以有效地进行数组操作和处理。
致谢
在此,我要对所有为知识共享做出贡献的个人和机构表示最深切的感谢。同时也感谢每一位花时间阅读这篇文章的读者,如果文章中有任何错误,欢迎留言指正。
学习永无止境,让我们共同进步!!