2016-11-12 7 views
1

私は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 

エラーですV: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 VENDOR VM_CLASS VM_TYPE assignType

+0

正確に何をしようとしていますか?同じJSONを生成するためにYAMLの構文解析について言及しますが、入力を解析するには '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、 で文字列のインデックスを使用する場合は、バッシュ4でサポートされて連想配列、 としてそれを宣言する必要があります。

declare -A ARR 
+0

しかしlocalhost.localdomainのようなキーはありません!それが私を夢中にさせてくれます。 –

+0

あなたのコンピュータはあなたに同意しません。 'echo $ key'文を' ARR [$ key] = ... '行の前に追加してください。そのような鍵を持っていることがわかります。おそらく、あなたが(明らかに)期待していなかった別のエラーが原因です。 – janos

+0

似たようなキーが見つからない場合は、何を試してみてください。 –

1

あなたは非数字キーを使用したい場合は、通常の配列の代わりに連想配列を使用します。あなたはしかし、それを宣言し、そのARRは、インデックス付きの配列(連想ではない)であるとkeyの値がlocalhost.localdomainときにこれがARR[$key]=...に起こる

declare -A ARR 
関連する問題