5 list 语法

在 Shell 脚本中,列表(数组)是一种非常有用的数据结构,可以用来存储多个值。

定义数组

bash 复制代码
# 定义一个空数组
my_array=()

# 定义一个带有初始值的数组
my_array=("value1" "value2" "value3")

访问数组元素

bash 复制代码
# 访问数组的第一个元素(索引从0开始)
echo "${my_array[0]}"  # 输出: value1

# 访问数组的所有元素
echo "${my_array[@]}"  # 输出: value1 value2 value3

添加元素到数组

bash 复制代码
# 添加单个元素到数组
my_array+=("value4")

# 添加多个元素到数组
my_array+=("value5" "value6")

获取数组长度

bash 复制代码
# 获取数组的长度
length=${#my_array[@]}
echo "Array length: $length"  # 输出: Array length: 6

遍历数组

bash 复制代码
# 使用 for 循环遍历数组的所有元素
for element in "${my_array[@]}"; do
    echo "$element"
done

示例解释

bash 复制代码
# 初始化一个空数组,用于存储指令名称
INSTRUCTIONS=()

# 遍历 SOURCE_DIR 目录下所有扩展名为 .c 的文件
for FILE in "$SOURCE_DIR"/*.c; do
    if [ -f "$FILE" ]; then
        # 复制文件到目标目录
        cp "$FILE" "$TARGET_DIR"
        
        # 获取文件名(不包括扩展名),并将其赋值给变量 INSTRUCTION
        INSTRUCTION=$(basename "$FILE" .c)
        
        # 将指令名称添加到 INSTRUCTIONS 数组中
        INSTRUCTIONS+=("$INSTRUCTION")
    fi
done

# 打印所有指令名称
echo "Instructions: ${INSTRUCTIONS[@]}"

在这个示例中:

  1. 初始化数组

    bash 复制代码
    INSTRUCTIONS=()

    初始化一个空数组 INSTRUCTIONS,用于存储指令名称。

  2. 遍历文件并添加到数组

    bash 复制代码
    for FILE in "$SOURCE_DIR"/*.c; do
        if [ -f "$FILE" ]; then
            cp "$FILE" "$TARGET_DIR"
            INSTRUCTION=$(basename "$FILE" .c)
            INSTRUCTIONS+=("$INSTRUCTION")
        fi
    done
    • 遍历 SOURCE_DIR 目录下所有扩展名为 .c 的文件。
    • 如果文件存在且是普通文件,则将其复制到目标目录 TARGET_DIR
    • 获取文件名(不包括扩展名),并将其添加到 INSTRUCTIONS 数组中。
  3. 打印数组内容

    bash 复制代码
    echo "Instructions: ${INSTRUCTIONS[@]}"

    打印数组 INSTRUCTIONS 中的所有指令名称。

其他数组操作示例

删除数组元素
bash 复制代码
# 删除数组中的某个元素
unset my_array[1]

# 删除整个数组
unset my_array
访问数组的部分元素
bash 复制代码
# 访问数组的前两个元素
echo "${my_array[@]:0:2}"  # 输出: value1 value3

完整示例

以下是一个完整的示例脚本,展示了数组的各种操作:

bash 复制代码
#!/bin/bash

# 定义一个带有初始值的数组
my_array=("value1" "value2" "value3")

# 添加元素到数组
my_array+=("value4")
my_array+=("value5" "value6")

# 获取数组的长度
length=${#my_array[@]}
echo "Array length: $length"

# 访问数组的所有元素
echo "All elements: ${my_array[@]}"

# 遍历数组的所有元素
for element in "${my_array[@]}"; do
    echo "Element: $element"
done

# 删除数组中的某个元素
unset my_array[1]

# 访问数组的所有元素
echo "All elements after deletion: ${my_array[@]}"

# 删除整个数组
unset my_array

# 尝试访问已删除的数组
echo "All elements after deleting the array: ${my_array[@]}"
bash 复制代码
kemao@TP340:~/shell-test$ ./test.sh 
Array length: 6
All elements: value1 value2 value3 value4 value5 value6
Element: value1
Element: value2
Element: value3
Element: value4
Element: value5
Element: value6
All elements after deletion: value1 value3 value4 value5 value6
All elements after deleting the array: 
相关推荐
txg66610 分钟前
自动驾驶领域热点简报(2026-04-26 ~ 2026-05-03)
linux·人工智能·自动驾驶
二哈赛车手18 分钟前
新人笔记---ES和kibana启动问题以及一些常用的linux的错误排查方法,以及ES,数据库泄密解决方案[超详细]
java·linux·数据库·spring boot·笔记·elasticsearch
嵌入式×边缘AI:打怪升级日志27 分钟前
嵌入式Linux开发核心自测题(全系列精华浓缩)
java·linux·运维
嵌入式×边缘AI:打怪升级日志35 分钟前
TinaSDK Linux Kernel 基本使用(全志T113开发板)
linux·运维·服务器
嵌入式×边缘AI:打怪升级日志1 小时前
Linux内核基础完全入门指南(理论篇)
linux·运维·服务器
Muyuan19981 小时前
28.Paper RAG Agent 开发记录:修复 LLM Rerank 的解析、Fallback 与可验证性
linux·人工智能·windows·python·django·fastapi
比昨天多敲两行1 小时前
Linux进程概念
linux·运维·服务器
HLC++2 小时前
Linux的基本指令+权限+基础开发工具
linux·运维·服务器
一拳一个娘娘腔2 小时前
红队与蓝队视角:现代网络安全攻防中的Linux命令深度解析
linux·安全
杨云龙UP4 小时前
ODA运维实战:Oracle 19c YJXT PDB表空间在线扩容全过程_20260503
linux·运维·服务器·数据库·oracle