jq変数の等価比較

jq変数の等価比較

curlリクエストを実行してjqを介してステータスを出力するbashスクリプトがあります。予期された状態を取得しましたが、状態を比較するときに値が同じであっても(またはそうである場合でも)、常に「等しくない」値を返します。

スクリプトは次のとおりです。

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また、私が知っている限り、スクリプトのように配列変数は必要ありません。

おすすめ記事