Bash 数组

2020-06-18 18:48 更新

数组声明

  1. 索引数组

使用declare-a选项,将变量来声明数组,语法如下:

  1. #声明数组
  2. declare -a Array_Name
  3. #创建数组元素
  4. Array_Name[index_1]=value_1
  5. Array_Name[index_2]=value_2
  6. #或
  7. Array_Name=(
  8. [index_1]=value_1
  9. [index_2]=value_2
  10. )

注:
- 在 Bash 中命名数组的规则与变量的命名规则相同。
- Array_Name是数组名称。
- index是为正整数的索引。

  1. 关联数组

使用declare-A选项来声明数组,语法如下:

  1. #声明数组
  2. declare -A Array_Name
  3. #创建数组元素
  4. Array_Name[index_1]=value_1
  5. Array_Name[index_2]=value_2
  6. #或
  7. Array_Name=(
  8. [index_1]=value_1
  9. [index_2]=value_2
  10. )

  1. 数组初始化

  1. Array_Name=(element_1 element_2 element_3)
  1. >注:
  2. >- 此处索引从0开始。
  3. >- `=`两侧无空格。

  1. 打印数组

  1. declare -p Array_Name

数组运算

  1. 访问元素

您要想访问一个元素,首先需要知道该元素的索引下标,然后使用以下语法进行访问获取。

  1. ${Array_Name[index]}

如果您使用@*作为索引进行访问获取,那么将会得到数组中的所有元素。

  1. #!/bin/bash
  2. declare -a arr=("welcome" "to" "W3Cschool")
  3. echo "@"
  4. for i in "${arr[@]}"
  5. do
  6. echo "$i"
  7. done
  8. echo "*"
  9. for i in "${arr[*]}"
  10. do
  11. echo "$i"
  12. done

执行后得到以下结果:

  1. @
  2. welcome
  3. to
  4. W3Cschool
  5. *
  6. welcome to W3Cschool

注:
- @*两者的区别主要体现在循环结果的不同。

  1. 打印数组键

您还可以检索和打印在数组中使用的键。语法如下:

  1. ${!Array_Name[index]}

示例:

  1. #!/bin/bash
  2. declare -a arr=( "Welcome" "To" "W3Cschool" )
  3. echo "${!arr[@]}"

执行后得到以下结果:

  1. 0 1 2

  1. 查找数组长度

数组长度即数组中的元素个数,语法如下:

  1. ${#ARRAY_NAME[@]}
  1. **示例:**
  2. ```
  3. #!/bin/bash

declare -a arr=( "Welcome" "To" "W3Cschool" )

echo "The array contains ${#arr[@]} elements"

  1. 执行后得到以下结果:
  1. The array contains 3 elements
  2. ```

  1. 遍历数组

遍历数组的通用方法是 for 循环,如下所示:

  1. #!/bin/bash
  2. declare -a arr=( "Welcome" "To" "W3Cschool" )
  3. for i in "${!arr[@]}"
  4. do
  5. echo The key value of element "${arr[$i]}" is "$i"
  6. done

执行后得到以下结果:

  1. The key value of element Welcome is 0
  2. The key value of element to is 1
  3. The key value of element W3Cschool is 2

  1. 添加或删除元素

  • 添加元素

  1. Array_Name[index]="New Element"

示例:

  1. #!/bin/bash
  2. declare -a arr=( "Java" "Python" "PHP" "HTML" )
  3. arr[4]="JavaScript"
  4. echo "${arr[@]}"

执行后得到以下结果:

  1. Java Python PHP JavaScript CSS SQL

  • 删除元素

  1. unset ARRAY_NAME[index]

示例:

  1. #!/bin/bash
  2. declare -a arr=( "Java" "Python" "HTML" "CSS" "JavaScript" )
  3. unset arr[1]
  4. echo "${arr[@]}"

执行后得到以下结果:

  1. Java HTML CSS JavaScript

  1. 删除数组

可以通过将数组名称作为参数传递给unset命令执行删除操作,如下所示:

  1. #!/bin/bash
  2. declare -a arr=( "Java" "Python" "HTML" "CSS" "JavaScript" )
  3. unset arr
  4. echo ${!arr[@]}
  5. echo ${!arr[@]}

执行后返回空结果,数组已不存在。

  1. 数组切片

Bash 数组也可以从指定的起始索引切片至指定的结束索引,语法如下:

  1. Slieced_Array=(${Array_Name[@]:m:n}")

示例:

  1. #!/bin/bash
  2. example_array=( "Java" "Python" "HTML" "CSS" "JavaScript" )
  3. sliced_array=("${example_array[@]:1:3}")
  4. for i in "${sliced_array[@]}"
  5. do
  6. echo $i
  7. done

执行后得到以下结果:

  1. Python
  2. HTML
  3. CSS
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号