Menu Close

Shell脚本文件的数组定义和读取,数组长度和数组操作

在 Shell 脚本中,数组是一种非常有用的数据结构,可以用来存储多个值。与许多编程语言一样,Shell 也提供了对数组的支持,但它的语法和操作方式有所不同。C语言数组教程

数组中可以存放多个值。Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小(与 PHP 类似)。

与大部分编程语言类似,数组元素的下标由0开始。

Shell 数组用括号来表示,元素用”空格”符号分割开,语法格式如下:

一). 定义数组

在 Shell 脚本中,数组的定义方式有几种。

1.1 定义一个简单的数组

array_name=(value1 value2 ... valuen)

例如:

fruits=("apple" "banana" "cherry")

1.2 定义一个带有索引的数组

还可以单独定义数组的各个分量:

array_name[0]=value0
array_name[1]=value1
array_name[2]=value2

可以不使用连续的下标,而且下标的范围没有限制。

例如:

fruits[0]="apple"
fruits[1]="banana"
fruits[2]="cherry"

二)读取数组元素

可以通过数组的索引来访问数组中的元素。索引从 0 开始。读取数组元素值的一般格式是:

${array_name[index]}

例如:

echo ${fruits[1]}  # 输出 "banana"

三)获取数组的所有元素

使用@ 或 * 可以获取数组中的所有元素,例如:

${array_name[*]}
${array_name[@]}

四)获取数组长度

可以通过 ${#array_name[@]} ${#array_name[*]} 来获取数组的长度,即数组中元素的个数。
 # 取得数组元素的个数 length=${#array_name[@]} # 或者 length=${#array_name[*]} # 取得数组单个元素的长度 lengthn=${#array_name[n]} 

 

五) 遍历数组

可以使用 for 循环遍历数组中的所有元素。

for element in "${array_name[@]}"
do
    echo $element
done

例子:

fruits=("apple" "banana" "cherry")

for fruit in "${fruits[@]}"
do
    echo $fruit
done

结果

apple
banana
cherry

六) 修改数组元素

可以通过索引直接修改数组中的某个元素。

array_name[index]=new_value

例子:

fruits[1]="orange"  # 将 "banana" 修改为 "orange"

结果

apple orange cherry

七) 删除数组元素

可以使用 unset 命令删除数组中的某个元素。

unset array_name[index]

例子:

unset fruits[1]
echo ${fruits[@]}

结果

apple cherry

在这个例子中,fruits[1] 被删除,数组现在只剩下 “apple” 和 “cherry”。

八) 多维数组(不直接支持)

Shell 脚本不直接支持多维数组,但可以通过定义包含数组的数组来实现类似效果。

例子:

matrix[0]="1 2 3"
matrix[1]="4 5 6"
matrix[2]="7 8 9"

echo ${matrix[0]}  # 输出 "1 2 3"

九) 关联数组(仅在 Bash 4 及以上版本支持)

关联数组允许使用字符串作为索引。

declare -A assoc_array
assoc_array[key1]=value1
assoc_array[key2]=value2

例子:

declare -A colors
colors[apple]="red"
colors[banana]="yellow"
echo ${colors[apple]}  # 输出 "red"

这些输出说明了每个数组操作在 Shell 脚本中的实际效果。你可以在终端中尝试这些命令以更好地理解它们的工作原理。

qwe

READ  把写入的数按写入的相反顺序打印出来
除教程外,本网站大部分文章来自互联网,如果有内容冒犯到你,请联系我们删除!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Leave the field below empty!

Posted in 外壳脚本

Related Posts