Bash 为什么会出现错误';无效的算术运算符';?

Bash 为什么会出现错误';无效的算术运算符';?,bash,shell,Bash,Shell,我正在尝试将yaml解析为Json。 我想设置具有字符串索引的数组 当我尝试它时,我犯了一个错误 这是我的来源和错误 keys=$(echo $ci_json | jq 'keys') key_array=($keys) ARR=() for raw_key in ${key_array[@]}; do if [ $raw_key = '[' -o $raw_key = ']' ]; then continue; else

我正在尝试将yaml解析为Json。 我想设置具有字符串索引的数组

当我尝试它时,我犯了一个错误

这是我的来源和错误

keys=$(echo $ci_json | jq 'keys')
key_array=($keys)
ARR=()

for raw_key in ${key_array[@]}; do
        if [ $raw_key = '[' -o $raw_key = ']' ]; then
                continue;
        else
                key=$(echo $raw_key | sed -e 's/"//g' -e 's/,//g')
                value=$(echo $ci_json | jq .$key)$'\t'
                ARR[$key]=$value
        fi
done
错误:localhost.localdomain:语法错误:算术运算符无效(错误标记为“.localdomain”)

此错误出现在“ARR[$key]=$value”处

有人帮我吗

这是ma密钥列表:

应用程序类型 应用程序使用 资产编号 资产统计 资产类型 比丘集团 商务L1 商务英语 CI_评论 奇诺 CI_所有者 家长 中央处理器时钟 CPU_核 CPU_模型 CPU数量 CPU供应商 数据库管理员1 数据库管理员2 开发管理员 开发管理员2 废弃日期 输入日期 到期日 HDD_模型 硬盘数量 HDD_型 硬盘驱动器供应商 硬盘容量 洞号 主机名 数据中心 约会 美因图公司 维护日期 MEM_模型 记忆数 MEM_供应商 MEM_VOL 模型 NIC1_IP 镍铬合金 NIC1_端口 NIC1_西南 二价镍 镍铬合金 镍2_端口 NIC2_SW NIC_模型 NIC_供应商 OOB_IP OOB_MAC OOB_端口 OOB_西南 奥苏拱门酒店 操作系统内核 OS_名称 架子 机架号 RAID\u缓存 雷丁公司 RAID\u模型 空袭号 RAID\u供应商 代表 高级行政主任 SC_类别 理工科 SC_型 发送日期 序列号 服务器类 模拟 规格代码 SVC_群 SVC_L1 SVC_L2 系统管理员 系统管理员2 单位 使用描述 小贩 VM_类 VM_类型
assignType

如果要使用非数字键,请使用关联数组而不是普通数组。但是,您必须声明它,所以请替换它

ARR=()

ARR
是索引数组(非关联)且
key
的值为
localhost.localdomain
时,在
ARR[$key]=…
上会发生这种情况。 索引数组应该使用数字下标,而不是任意字符串

如果要将字符串索引与
ARR
一起使用, 必须将其声明为关联数组, 从Bash 4开始支持:

declare -A ARR

但是没有像localhost.localdomain这样的密钥!这就是让我发疯的原因,因为你的电脑不适合你。在
ARR[$key]=…
行之前添加一个
echo$key
语句。你会发现你确实有这样的钥匙,可能是因为你(显然)没有预料到的另一个错误。如果我找不到任何钥匙,即使是类似的钥匙,我能试一下吗?我不明白你的问题。从错误消息中可以明显看出您有这样的密钥。查看echo$ci_json | jq'keys | grep localhost的输出。我不知道你还需要什么帮助。我会再试一次,无论如何,你到底想做什么?您提到解析YAML以生成等效的JSON,但您使用的是
jq
来解析输入。您的输入看起来像什么,预期的输出是什么?bash实际接触任何数据的
bash
越少,就越有可能您的代码在有效输入时不会中断。我试图做的是发送协议并获取YAML数据,然后将YAML更改为JSON,因为我认为JSON比YAML更容易解析。这就是我使用jq的原因。我可以把YAML改成JSON,我想设置一个数组,它有字符串索引,并且有来自JSON的数据。我希望可以将数组设置为“ARR[$key]=$value”,但当我尝试时,会出现错误。对不起,我英语不好。。
 Error : localhost.localdomain: syntax error: invalid arithmetic operator (error token is ".localdomain")
declare -A ARR