You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Bash脚本自动添加带索引数组元素并持久化到脚本文件

实现Bash脚本关联数组数据持久化

现有一段Bash脚本可自动向关联数组DATA中添加sidN格式索引的新值,但数据仅在脚本运行时有效,退出后即丢失。需求是:添加新元素时,同时将DATA[sidN]='新值'格式的代码写入脚本文件本身,实现数据持久化。

原脚本代码

#!/bin/bash
declare -A DATA
DATA[sid0]='aaaa'
DATA[sid1]='bbbb'
DATA[sid2]='cccc'
function newserver {
    sidtotal=0
    indexcount=0
    for indexcount in "${!DATA[@]}"
    do
        if [[ $indexcount == sid* ]]
        then
            sidtotal=$((sidtotal+1))
        fi
    done
    read -p "Name: " id
    DATA["sid$((sidtotal))"]=$id
    echo ${DATA[@]}
    echo sidtotal= $sidtotal
    read -p "Would like do add more data? [y - n]" MOREDATA
}
newserver

while [ "$MOREDATA" == y ];do
    newserver
done

修改后的持久化版本

#!/bin/bash
declare -A DATA
DATA[sid0]='aaaa'
DATA[sid1]='bbbb'
DATA[sid2]='cccc'

function newserver {
    # 获取脚本自身路径
    local SCRIPT_FILE="${BASH_SOURCE[0]}"
    # 计算下一个sid的编号:提取现有sid的数字,取最大值加1
    local sidtotal=0
    for index in "${!DATA[@]}"; do
        if [[ $index =~ ^sid([0-9]+)$ ]]; then
            local num=${BASH_REMATCH[1]}
            if (( num >= sidtotal )); then
                sidtotal=$((num + 1))
            fi
        fi
    done

    # 读取用户输入
    read -p "Name: " id
    # 转义输入中的单引号,避免写入脚本时语法错误
    local escaped_id="${id//\'/\'\\\'\'}"
    # 添加到数组
    DATA["sid$sidtotal"]="$id"

    # 定位脚本中最后一行DATA[sid*]的行号
    local last_data_line=$(grep -n "^DATA\[sid" "$SCRIPT_FILE" | tail -n1 | cut -d: -f1)
    # 插入新的DATA赋值行到脚本中
    sed -i "${last_data_line}a DATA[sid$sidtotal]='${escaped_id}'" "$SCRIPT_FILE"

    # 输出当前数组内容和编号
    echo "当前数组内容:${DATA[@]}"
    echo "新添加的sid编号:sid$sidtotal"

    # 询问是否继续添加
    read -p "是否继续添加数据?[y - n]" MOREDATA
}

newserver

while [ "$MOREDATA" == y ]; do
    newserver
done

关键改动说明

  • 获取脚本路径:用${BASH_SOURCE[0]}获取当前脚本的路径,确保能正确定位并修改脚本文件。
  • 优化sid编号计算:通过正则提取现有sidN中的数字,取最大值加1,避免因删除元素导致的编号混乱。
  • 转义特殊字符:对用户输入中的单引号进行转义处理,防止写入脚本后出现语法错误。
  • 写入脚本逻辑:用grep找到最后一行DATA[sid*]的行号,再通过sed在该行下方插入新的赋值语句,保证下次运行脚本时能加载新数据。

内容的提问来源于stack exchange,提问作者Yohrannes Santos Bigoli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 05:43:20