数组 (Shell 基础教程 4)

教程

数组可以使用一个名称保存多个值。数组的命名规则与普通变量相同。

可以通过在括号 () 中赋值以空格分隔的值来初始化数组:

my_array=(apple banana "Fruit Basket" orange)
new_array[2]=apricot

数组成员的索引不必是连续的,某些成员可以保留为未初始化状态。

数组中元素的总数可以通过 ${#arrayname[@]} 获取:

my_array=(apple banana "Fruit Basket" orange)
echo ${#my_array[@]}                   # 输出:4

可以使用数字索引访问数组元素,第一个元素的索引为 0

my_array=(apple banana "Fruit Basket" orange)
echo ${my_array[3]}                     # 输出:orange - 注意需要花括号
# 添加另一个数组元素
my_array[4]="carrot"                    # 赋值时不需要 $ 符号,但需要花括号
echo ${#my_array[@]}                    # 输出:5
echo ${my_array[${#my_array[@]}-1]}     # 输出:carrot

练习

在本练习中,您需要将数字和字符串添加到正确的数组中。具体要求如下:

  1. 将数字 123 添加到 NUMBERS 数组中。
  2. 将单词 helloworld 添加到 STRINGS 数组中。
  3. 更正变量 NumberOfNamessecond_name 的值:

    • NumberOfNames 应该使用 $# 特殊变量(实际上是 ${#array[@]} 语法)保存 NAMES 数组中名称的总数。
    • second_name 应该使用方括号 [ ] 获取 NAMES 数组中的第二个名称。请注意索引是从零开始的,因此访问列表中的第二项时,其索引应为 1

教程代码

#!/bin/bash
NAMES=( John Eric Jessica )
# write your code here
NUMBERS=()
STRINGS=()
NumberOfNames=0
second_name='Vladimir'

预期输出

1 2 3
hello world
The number of names listed in the NAMES array: 3
The second name on the NAMES list is: Eric

解决方案

#!/bin/bash
NAMES=( John Eric Jessica )
# write your code here
NUMBERS=( 1 2 3 )
STRINGS=( "hello" "world" )
NumberOfNames=${#NAMES[@]}
second_name=${NAMES[1]}
echo ${NUMBERS[@]}
echo ${STRINGS[@]}
echo "The number of names listed in the NAMES array: $NumberOfNames"
echo "The second name on the NAMES list is:" ${second_name}

系列教程链接

说明:本文示例基于 Bash shell。数组是 Bash 的特性,标准的 POSIX sh 可能不支持数组语法。请确保脚本解释器指定为 #!/bin/bash