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

Bash关联数组加载带引号键的文件失败问题求助

Bash关联数组读入带引号键的问题解决

问题本质

你遇到的核心差异在于:

  • 手动赋值时写的dict["g"]="g",这里的引号是Bash的语法符号,用来界定字符串边界,实际存入数组的键是g,引号不会被当作键的一部分。
  • 从文件里read到的"a"是完整的字符串内容,引号会被当作键的一部分存入数组,也就是说数组里的键是"a"(带引号),而不是a。这时候你用${dict[a]}去访问,自然找不到对应的值。

两种解决方案

方案1:读取时移除引号(推荐)

如果你的目标是把a、b作为键,而非带引号的"a"、"b",可以在读取后用参数扩展去掉引号,或者预处理输入文件:

方法A:用参数扩展移除引号

修改循环部分:

#!/bin/bash -e

declare -A dict

while read key; do
    # 移除字符串中的所有双引号
    key=${key//\"/}
    dict[$key]=$key
done < test2.txt

echo "This works ${dict[a]} ${dict[b]}"

方法B:用sed预处理输入

直接在读取文件时通过sed去掉引号:

#!/bin/bash -e

declare -A dict

while read key; do
    dict[$key]=$key
done < <(sed 's/"//g' test2.txt)

echo "This works ${dict[a]} ${dict[b]}"

方案2:保留引号作为键的一部分

如果你确实需要把带引号的字符串作为键,访问时必须匹配带引号的键,比如:

#!/bin/bash -e

declare -A dict

while read key; do
    dict[$key]=$key
done < test2.txt

# 用单引号包裹带引号的键,避免shell解析
echo "This works ${dict['"a"']} ${dict['"b"']}"

或者用转义的方式:${dict["\"a\""]},效果是一样的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 14:40:45