jq 变量的相等比较

jq 变量的相等比较

我有一个 bash 脚本,它运行一个curl 请求并通过jq 输出状态。我得到了预期的状态,但是当我比较状态时,它总是返回“不等于”值,即使该值相等(或看起来如此)。

这是脚本:

status=( $(curl -H "Content-Type: application/json" -H "Authorization: Basic xxx==" -H "Cache-Control: no-cache" --data-binary "@$entry" $2/$3/_bulk_docs --silent | jq '.[0].status'))
echo $status
if [ "$status" = "409" ]
    then
      echo "Conflict"
    else
      echo "No Conflict"
fi

正如我所料,它在控制台中打印 409 。

我在装有 Cygwin 的 Windows 10 PC 上运行此程序。

感谢您的进一步帮助!

答案1

您的数据末尾有一个回车符:

$ status=$'409\r'
$ echo "<<$status>>"
>>409

要删除它,请tonumber使用jq

status=$( curl ... | jq -r '.[0].status|tonumber' )

status另请注意,据我所知,没有必要像在您的脚本中那样成为数组变量。

相关内容