Bash 为什么会出现错误';无效的算术运算符';?
我正在尝试将yaml解析为Json。 我想设置具有字符串索引的数组 当我尝试它时,我犯了一个错误 这是我的来源和错误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
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