【发布时间】:2020-07-23 17:23:41
【问题描述】:
假设$commandGetEvents 是一个 json 对象数组。我使用以下命令提取事件 ID,它是一个 1 - 65 的数字,并将其存储在 currentEventId 中。现在让我们假设我有另一个名为 startedEventId 的变量,它包含我正在寻找的值,即 22。
这是 $commandGetEvents 包含的数据示例。
[
{
"eventId": 22,
"Name" : "Bob"
"Activity" : "Eat Food"
"startedEventId" : 15
},
{
"eventId": 21,
"Name" : "Smith"
"Activity" : "Ride a bike"
"startedEventId" : 13
},
{
"eventId": 20,
"Name" : "Tony"
"Activity": "Print paper"
"startedEventId" : 10
},
]
eventId 是 json 对象的唯一标识符。 & startedEventId 是导致当前事件发生的 json 对象的标识符。
currentEventId=$(jq ".[$index].eventId" <<< ${commandGetEvents})
startedEventid=$(jq ".[${eventCounter}].startedEventId" <<< $commandGetEvents)
当我在 while 循环中回显两个语句时,我得到以下输出。
currentEventId = 1
startedEventId = 22
currentEventId = 2
startedEventId = 22
currentEventId = 3
startedEventId = 22
while 循环一直持续到 currentEventId 的所有元素都用完为止。
我的问题是当我像这样比较两个语句时:
if [[ ${startedId} -eq ${currentEventId} ]] ;
then
echo "Equal"
fi
我收到以下错误消息:
line 90: [[: 22: syntax error: operand expected (error token is "22")
【问题讨论】:
-
什么是
startedId? -
请提供
commandGetEvents的示例值,当与您显示的代码一起使用时,会重现错误;见minimal reproducible example。 -
听起来像是变量中有一些不可打印的错误数据。
printf '%s\n' "${startedId}" "${currentEventId}" | cat -v的输出是什么? -
变量
startedId很可能为空或未设置。 -
将
-eq更改为==可能是一种选择,但也可能隐藏真正的问题。我猜startedId或currentEventId包含"<something> 22"其中<something>包含一个运算符..