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

Bash中如何解析类字典字符串数组为字典并读取指定键值

问题说明

当前拿到的解码后配置为KEY='VALUE'格式的字符串数组,需要读取指定键(例如FOO)的对应值,不需要强制把全量内容解析为字典结构,根据使用场景选对应方案即可。

实现方案

方案1:单键快速匹配(无需全量解析,推荐iOS构建Pre-action脚本使用)

如果只需要读取1-2个指定键的值,不需要做全量字典转换,直接遍历匹配目标键前缀即可,兼容性好(适配macOS自带的低版本bash)、执行效率高,找到目标值就可以终止遍历:

# 原有DART_DEFINES解码逻辑
function entry_decode() { echo "${*}" | base64 --decode; }
IFS=',' read -r -a define_items <<< "$DART_DEFINES"
for index in "${!define_items[@]}"
do
    define_items[$index]=$(entry_decode "${define_items[$index]}");
done

# 读取指定键的值,示例为读取FOO
TARGET_KEY="FOO"
TARGET_VALUE=""
for item in "${define_items[@]}"; do
    # 匹配当前项是否为目标键开头
    if [[ $item == "${TARGET_KEY}="* ]]; then
        # 截取等号后的内容,去除首尾包裹的单引号
        TARGET_VALUE=${item#*=}
        TARGET_VALUE=${TARGET_VALUE#\'}
        TARGET_VALUE=${TARGET_VALUE%\'}
        break
    fi
done

# 此时$TARGET_VALUE即为对应键的存储值
echo "读取到${TARGET_KEY}的值:${TARGET_VALUE}"

方案2:全量解析为关联数组(适合多键频繁读取场景)

如果后续需要读取3个及以上配置项,可以一次性把所有内容解析为bash原生关联数组,后续直接按键取值即可。注意该方案依赖bash 4.0及以上版本,macOS系统默认自带的bash为3.2版本,需要提前升级bash才能正常使用:

# 声明关联数组结构
declare -A define_dict

# 解码+解析存入字典
function entry_decode() { echo "${*}" | base64 --decode; }
IFS=',' read -r -a define_items <<< "$DART_DEFINES"
for index in "${!define_items[@]}"
do
    item=$(entry_decode "${define_items[$index]}")
    # 拆分键、值
    key=${item%%=*}
    value=${item#*=}
    # 去除值首尾的单引号
    value=${value#\'}
    value=${value%\'}
    define_dict[$key]=$value
done

# 后续直接按键取值即可
echo "FOO值:${define_dict[FOO]}"
echo "BAR值:${define_dict[BAR]}"

提示:如果配置值本身包含单引号,需要根据实际转义规则调整字符串截取逻辑,常规无特殊字符的配置场景下上述代码可以直接使用。

内容的提问来源于stack exchange,提问作者user9836706

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 01:01:00