Linux 中 Bash 数组简介
介绍
Bash 是 Linux 和其他基于 Unix 的操作系统中使用的流行命令行 shell。 Bash 的强大功能之一是它对数组的支持。数组是可以使用索引访问的值的集合。在本文中,我们将讨论 Bash 数组的基础知识以及如何在 Linux 中使用它们。
什么是 Bash 数组?
Bash 数组是一个可以保存多个值的变量。值存储在连续的内存位置中,并且可以使用索引进行访问。数组中第一个元素的索引为 0,最后一个元素的索引为元素总数减一。
声明一个数组
要在 Bash 中声明数组,请使用以下语法 -
array_name=(value1 value2 value3 …)
例如,要声明水果名称数组,您可以使用以下命令 -
fruits=(apple banana cherry)
您还可以声明一个数组,其值位于单独的行上 -
fruits=(
apple
banana
cherry
)
访问数组元素
要访问数组中的元素,请使用以下语法 -
${array_name[index]}
例如,要访问水果数组的第一个元素,您可以使用以下命令 -
echo ${fruits[0]}
这将输出苹果。
您还可以使用变量作为索引来访问数组中的元素 -
index=1
echo ${fruits[$index]}
这将输出香蕉。
数组长度
要获取数组的长度,您可以使用以下语法 -
${#array_name[@]}
例如,要获取水果数组的长度,您可以使用以下命令 -
echo ${#fruits[@]}
这将输出 3。
迭代数组
要迭代数组,可以使用 for 循环。这是一个例子 -
for fruit in "${fruits[@]}"
do
echo $fruit
done
这将输出 -
apple
banana
cherry
追加到数组
要将值附加到数组,您可以使用以下语法 -
array_name+=(value)
例如,要将“orange”附加到水果数组中,您可以使用以下命令 -
fruits+=(orange)
这会将“橙色”添加到水果数组的末尾。
从数组中删除元素
要从数组中删除元素,可以使用 unset 命令。这是一个例子 -
unset array_name[index]
例如,要从水果数组中删除第二个元素,您可以使用以下命令 -
unset fruits[1]
这将从水果数组中删除“香蕉”。
多维数组
Bash 还支持多维数组。多维数组是数组的数组。这是一个例子 -
matrix=(
(1 2 3)
(4 5 6)
(7 8 9)
)
要访问多维数组中的元素,您可以使用以下语法 -
${array_name[row_index][column_index]}
例如,要访问矩阵数组第二行第三列中的元素,可以使用以下命令 -
echo ${matrix[1][2]}
这将输出 6。
附加主题
Bash 中的关联数组
除了我们到目前为止讨论的索引数组之外,Bash 还支持关联数组。关联数组是键值对的集合,其中键是值的唯一标识符。要声明关联数组,请使用以下语法 -
declare -A array_name
例如,要声明水果价格的关联数组,您可以使用以下命令 -
declare -A fruit_prices
fruit_prices=([apple]=0.50 [banana]=0.25 [cherry]=0.10)
要访问关联数组中的元素,可以使用键而不是索引 -
echo ${fruit_prices[apple]}
这将输出 0.50。
您还可以使用 for 循环迭代关联数组 -
for key in "${!fruit_prices[@]}"
do
echo "$key: ${fruit_prices[$key]}"
done
这将输出 -
apple: 0.50
banana: 0.25
cherry: 0.10
复制数组
要在 Bash 中复制数组,您可以使用以下语法 -
new_array=("${old_array[@]}")
例如,要复制水果数组,您可以使用以下命令 -
new_fruits=("${fruits[@]}")
这将创建一个名为 new_fruits 的新数组,其中包含与fruits 数组相同的值。
数组排序
Bash 提供了多种对数组进行排序的方法。一种方法是使用带有 -n 选项的 sort 命令以数字方式对数组进行排序,或使用 -r 选项以相反的顺序对数组进行排序。这是一个例子 -
sorted_fruits=($(echo "${fruits[@]}" | tr ' ' '
' | sort -r))
这将以相反的顺序对fruits数组进行排序并将结果存储在sorted_fruits数组中。
对数组进行排序的另一种方法是使用循环并将每个元素与其他元素进行比较。这是一个例子 -
for ((i=0; i<${#fruits[@]}; i++))
do
for ((j=i+1; j<${#fruits[@]}; j++))
do
if [[ "${fruits[i]}" > "${fruits[j]}" ]]
then
temp=${fruits[i]}
fruits[i]=${fruits[j]}
fruits[j]=$temp
fi
done
done
这将以升序对水果数组进行排序。
在 Bash 脚本中使用数组
数组在 Bash 脚本中非常有用。例如,您可以使用数组来存储命令行参数、用户输入或命令结果。下面是一个使用数组来存储用户输入的 Bash 脚本示例 -
#!/bin/bash
echo "Enter your favorite fruits, separated by spaces:"
read -a fruits
echo "Your favorite fruits are:"
for fruit in "${fruits[@]}"
do
echo $fruit
done
该脚本提示用户输入他们最喜欢的水果,将输入存储在名为“fruits”的数组中,然后显示数组的内容。
结论
在本文中,我们讨论了 Bash 数组的基础知识以及如何在 Linux 中使用它们。我们已经介绍了声明数组、访问数组元素、数组长度、迭代数组、追加到数组、从数组中删除元素以及多维数组。 Bash 数组是一项强大的功能,可以简化 Linux 中的许多任务,例如数据处理和管理。通过掌握 Bash 数组,您可以提高 Linux 命令行工作的效率。