2016-11-12 53 views
1

我想解析yaml到Json。 我想設置具有字符串索引的數組。爲什麼我得到一個錯誤「無效的算術運算符」?

當I V試了一下我得到一個錯誤

這裏是我的源和錯誤

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 [$關鍵] = $值」

任何人可以幫助我嗎?

這是馬密鑰列表:

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 EXPIRE_DATE HDD_MODEL HDD_NUM HDD_TYPE HDD_VENDOR HDD_VOL HOLE_NO HOSTNAME IDC INTO_DATE MAINT_CORP MAINT_DATE MEM_MODEL MEM_NUM MEM_VENDOR MEM_VOL MODEL 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 SERIAL_NO 將server_class SIM SPEC_CODE SVC_GROUP SVC_L1 SVC_L2 SYS_ADMIN SYS_ADMIN2 UNIT USE_DESC 賣方 VM_CLASS VM_TYPE assignType

+0

究竟是什麼你想怎麼辦?你提到解析YAML來生成等價的JSON,但是你使用'jq'來解析輸入。你的輸入是什麼樣的,什麼是預期的輸出? ''bash'實際上觸及了任何數據,越有可能您的代碼在有效輸入中不會中斷。 – chepner

+0

我想要做的是發送協議,並獲取YAML數據,然後將YAML更改爲JSON因爲我認爲JSON比YAML更容易解析。這就是爲什麼我使用jq。我可以將YAML更改爲JSON,並且我想要設置具有字符串索引並具有JSON數據的數組。我希望我可以像「ARR [$ key] = $ value」那樣設置數組,但是當我嘗試它時,會發生錯誤。對不起馬英文.. –

回答

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

這種情況更換

ARR=() 

ARR[$key]=...ARR是索引數組(沒有關聯)和keylocalhost.localdomain。 索引數組應該使用數字下標,而不是任意字符串。

如果你想使用字符串的索引與ARR, 必須聲明爲一個關聯數組,其中 支持如猛砸4:

declare -A ARR 
+0

,但沒有像localhost.localdomain這樣的密鑰!這就是讓我發瘋的原因 –

+0

你的電腦不同意你的看法。在'ARR [$ key] = ...'行之前添加'echo $ key'語句。你會看到你有這樣的鑰匙,可能是由於你(顯然)沒有想到的另一個錯誤。 – janos

+0

如果我找不到任何關鍵,甚至類似的關鍵,我該怎麼辦呢 –

1

如果要使用非數字鍵,使用關聯數組而不是普通數組。你必須聲明一下,雖然如此,與

declare -A ARR 
相關問題