为什么我会收到错误'无效算术运算符'?

时间:2016-11-12 20:04:30

标签: 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 APP_USE ASSETS_NO ASSETS_STAT ASSETS_TYPE BIZ_GROUP BIZ_L1 BIZ_L2 CI_COMMENT CI_NO CI_OWNER CI_PARENT CPU_CLOCK CPU_CORE CPU_MODEL CPU_NUM CPU_VENDOR DB_ADMIN1 DB_ADMIN2 DEV_ADMIN DEV_ADMIN2 DISUSE_DATE ENTER_DATE 到期日期 HDD_MODEL HDD_NUM HDD_TYPE HDD_VENDOR HDD_VOL HOLE_NO 主机名 IDC INTO_DATE MAINT_CORP MAINT_DATE MEM_MODEL MEM_NUM MEM_VENDOR MEM_VOL 模型 NIC1_IP NIC1_MAC NIC1_PORT NIC1_SW NIC2_IP NIC2_MAC NIC2_PORT NIC2_SW NIC_MODEL NIC_VENDOR OOB_IP OOB_MAC OOB_PORT OOB_SW OS_ARCH OS_KERNEL OS_NAME 架 RACK_NO RAID_CACHE RAID_FIRM RAID_MODEL RAID_NO RAID_VENDOR 代表 SC_ADMIN SC_CATEGORY SC_DEPT SC_TYPE SEND_DATE 序列号 将server_class SIM卡 SPEC_CODE SVC_GROUP SVC_L1 SVC_L2 SYS_ADMIN SYS_ADMIN2 单元 USE_DESC 卖方 VM_CLASS VM_TYPE assignType

2 个答案:

答案 0 :(得分:1)

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

ARR=()

declare -A ARR

答案 1 :(得分:1)

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

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

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

declare -A ARR