2016-05-23 183 views
2

我怎样才能得到下面的命令工作。命令中的shell变量替换

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

我收到错误“原因”:“无法识别的标记‘$ CURDATE’:期待” 我如何获得的变量替换上面

+0

单引号中的时间戳将阻止shell变量的扩张。 – karakfa

+1

未来,“创建片段”按钮仅适用于HTML和JavaScript(它们允许在浏览器的浏览器中演示代码)。使用编辑器中的“{}”按钮进行所有其他语言的代码格式化。 –

回答

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

此处也不需要导出,即使需要导出也应该在分配后完成,以避免返回值的掩盖。 – sjsam

+1

使用'jq'生成有效的JSON可能是值得的。 –

0

如果你要手工编写JSON,这是简单的从标准输入读取它不是试图将它嵌入到一个参数:

curl -XPOST [email protected] "$URL" <<EOF 
{ "AlertType": "IDLE", 
    "@timestamp": "$CURDATE" 
} 
EOF 

尽管如此,您应该使用像jq这样的工具来为您生成JSON。

date +%F | jq -R '{AlertType: "IDLE", "@timestamp": .}' | curl -XPOST [email protected] "$URL" 

,或者让json完全建立在自己的

jq -n '{AlertType: "IDLE", "@timestamp": (now | strftime("%F"))}' | curl ...