我正在尝试使用curl在bash文件中发出GET请求。 所以我调用curl,并从我的服务器获取JSON响应,并尝试获取对象行,这是响应的一部分,我使用 jq ,所以我可以打印这个值。 但它不起作用。
我的回答是这样的:
{"line":"Azul", "id":"j3453j45n35", "lat":"39.091937", "long":"-9.265441"}
我的bash脚本:
#!/bin/bash
while :
do
cmd=$(curl -i -H "Content-Type: application/json" http://localhost:8080/cards/exists/1 | jq ‘.”line”’)
sleep 2
done
结果:
jq:错误:语法错误,意外的INVALID_CHARACTER,期待$ end(Unix shell引用问题?)at第1行: '。“线”' jq:1编译错误 (23)写作身体失败
出了什么问题? 我跟随人们在网上建议的大量回复,但我一直得到同样的回应。 我的json对象似乎是正确的。 我在MacOS Sierra上运行此文件
答案 0 :(得分:3)
您的代码存在两个问题:
您正在使用非ASCII引号(‘ ” ” ’
),jq
无法理解:
' " " '
TextEdit.app
等文本编辑器。功能已打开,或通过菜单系统关闭该功能:Edit > Substitutions > Smart Quotes
您的curl
命令包含标题输出(-i
),其中jq
扼流圈 - 只是省略了-i
:
#!/bin/bash
while :; do
cmd=$(curl -H 'Content-Type: application/json' 'http://localhost:8080/cards/exists/1' |
jq '.line')
sleep 2
done
虽然'."line"'
也会起作用,但是对于像这样的简单属性名称,不需要额外的引用层。
另外,最好在shell中的'...'
中包含您想要解释字面的字符串。