bash - 为什么我会收到错误 'invalid arithmetic operator' ?

标签 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
                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”

有人帮助我吗?

这是主要列表:

APP_TYPE 应用程序_使用 ASSETS_NO Assets 统计 Assets 类型 商业组 商务_L1 商务_L2 CI_COMMENT CI_NO CI_所有者 CI_PARENT 中央处理器时钟 中央处理器核心 CPU_型号 CPU_NUM CPU_供应商 数据库管理员1 数据库管理员2 开发管理员 开发者管理员2 DISUSE_DATE 输入_日期 到期日期 硬盘型号 HDD_NUM 硬盘类型 硬盘供应商 硬盘_卷 孔号 主机名 国际数据中心 INTO_DATE 维护公司 MAINT_DATE MEM_模型 MEM_NUM MEM_供应商 MEM_VOL 模型 网卡1_IP 网卡1_MAC 网卡1_端口 网卡1_SW 网卡2_IP 网卡2_MAC 网卡2_端口 网卡2_SW 网卡型号 NIC_供应商 外网IP OOB_MAC OOB_端口 OOB_SW 操作系统_ARCH 操作系统内核 操作系统_名称 架子 机架号 RAID_缓存 RAID_FIRM RAID_模型 RAID_NO RAID_供应商 代表 SC_管理员 SC_CATEGORY SC_DEPT SC_类型 发送_日期 序列号 服务器类 SIM卡 规范代码 SVC_GROUP SVC_L1 SVC_L2 系统管理员 系统管理员2 单元 使用_DESC 小贩 虚拟机类 虚拟机类型 分配类型

最佳答案

 Error : localhost.localdomain: syntax error: invalid arithmetic operator (error token is ".localdomain")

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

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

declare -A ARR

关于bash - 为什么我会收到错误 'invalid arithmetic operator' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40567099/

相关文章:

linux - Bash 和变量替换名称中带有空格的文件 : application for gpsbabel

Shell编程: nested expressions with command substitution

linux - 为什么 SunOS 说它不能执行这个 KornShell 脚本?

c++ - char* 的动态数组(或 chars 的二维动态数组)

c - 当你用&号调用相同的进程时,视觉上会发生什么

linux - 在目录下列出所有内容,并提供详细信息(Linux Shell命令)

arrays - 将远程 ssh 命令的输出存储到循环中的局部变量

linux - 从 Linux 文件中删除颜色代码

node.js - 在不使用额外的 NPM 包的情况下检查 package.json 是否在 shell 脚本中具有特定名称的脚本

bash - 从文件中的行中提取特定字符串并输出到另一个文件并进行修改