替换变量
如何使以下命令正常工作。
export CURDATE=`date +%Y-%m-%d`
curl -XPOST "http://localhost:9200/test/type"
-d ' { "AlertType": "IDLE", "@timestamp": $CURDATE }'
我收到错误"原因":"无法识别的令牌'$CURDATE':正在期待"如何在上面的代码中正确
单引号不会扩展变量,请使用双引号:
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
如果你要手写你的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 ...