如何让以下命令正常工作。
export CURDATE=`date +%Y-%m-%d`
curl -XPOST "http://localhost:9200/test/type" \
-d ' { "AlertType": "IDLE", "@timestamp": $CURDATE }'
我收到错误“原因”:“无法识别的令牌'$ CURDATE':期待” 如何在上面的代码中正确地获得变量替换
答案 0 :(得分:5)
单引号不会扩展变量,请使用双引号:
curdate=$(date +'%Y-%m-%d')
curl -XPOST "http://localhost:9200/test/type" \
-d '{"AlertType": "IDLE", "@timestamp": "'"$curdate"'"}'
我还在扩展中添加了JSON引用,因此它变成了:
{"AlertType": "IDLE", "@timestamp": "2016-05-23"}
不应该导出变量。通常只有环境变量写入全部大写。最后我将命令替换更改为$(...)
'{"AlertType": "IDLE", "@timestamp": "'"$curdate"'"}'
# ^^
# |End singlequotes
# JSON quote
答案 1 :(得分:0)
如果您要手写JSON,从标准输入中读取它比将其嵌入参数中更简单:
curl -XPOST -d@- "$URL" <<EOF
{ "AlertType": "IDLE",
"@timestamp": "$CURDATE"
}
EOF
您应该使用像jq
这样的工具为您生成JSON。
date +%F | jq -R '{AlertType: "IDLE", "@timestamp": .}' | curl -XPOST -d@- "$URL"
或让json
完全依靠自己构建时间戳
jq -n '{AlertType: "IDLE", "@timestamp": (now | strftime("%F"))}' | curl ...