【发布时间】:2015-05-20 16:22:38
【问题描述】:
如何将午夜后的分钟数传递给cli?
这行得通:
echo $[ ( ( `date "+%s"` - 28800 ) % 86400 ) / 60 ]
// Correctly returns minutes since midnight in PST
但是我怎样才能将它传递给另一个命令呢?
这不起作用:
my_cli --json '{"minutes" : ' $[ ( ( `date \"+%s\"` - 28800 ) % 86400 ) / 60 ] '}'
返回:
date: illegal time format
usage: date [-jnu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ...
[-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format]
ERROR: "my_cli json" was called with arguments ["-300", "}"]
Usage: "my_cli json"
我也试过了:
my_cli --json "{\"minutes\" : \$[ ( ( $(date "+%s") - 28800 ) % 86400 ) / 60 ] }"
我收到以下错误:
...unexpected token at '{"connection" : $[ ( ( 1432139956 - 28800 ) % 86400 ) / 60 ] }' (JSON::ParserError)`
【问题讨论】:
-
使用现代 shell 语法会有所帮助。使用
$(...)而不是反引号(这样你就不需要转义内部双引号)并使用$((...))而不是$[...]。看看你能不能做到这一点。 (该原件对我来说是关于日期格式的引号的错误。) -
你是对的,原来的有错误。不需要转义
"。 -
顺便说一句,使用字符串连接来构建 JSON 通常不是一个好习惯,尽管在这里它是安全的,其中被替换的变量只会是数字;当输入类型的约束比这少时,最好使用 jq、jsawk 或类似工具。
-
@Ryan,我删除了它,因为 rici 在正确的轨道上,所以我的是重复的。也就是说,我可以继续测试并重新添加它。
-
顺便说一句,如果你想在 OS X 上使用 GNU 日期,那是可行的;麦克波特公司将安装
gdate(我认为是coreutils的一部分)。
标签: bash shell command-line concatenation command-line-interface