我怎样才能得到下面的命令工作。命令中的shell变量替换
export CURDATE=`date +%Y-%m-%d`
curl -XPOST "http://localhost:9200/test/type" \
-d ' { "AlertType": "IDLE", "@timestamp": $CURDATE }'
我收到错误“原因”:“无法识别的标记‘$ CURDATE’:期待” 我如何获得的变量替换上面
我怎样才能得到下面的命令工作。命令中的shell变量替换
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
此处也不需要导出,即使需要导出也应该在分配后完成,以避免返回值的掩盖。 – sjsam
使用'jq'生成有效的JSON可能是值得的。 –
如果你要手工编写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 ...
单引号中的时间戳将阻止shell变量的扩张。 – karakfa
未来,“创建片段”按钮仅适用于HTML和JavaScript(它们允许在浏览器的浏览器中演示代码)。使用编辑器中的“{}”按钮进行所有其他语言的代码格式化。 –