我怎样才能让下面的命令生效。

export CURDATE=`date +%Y-%m-%d`
curl -XPOST "http://localhost:9200/test/type" \
  -d ' { "AlertType": "IDLE", "@timestamp": $CURDATE }'

我收到错误“reason”:“无法识别的标记“$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

关于bash - 命令中的Shell变量替换,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37398281/

10-12 14:48