命令中的外壳变量替换



如何使以下命令正常工作。

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 ...

相关内容

  • 没有找到相关文章

最新更新