我在shell中有一个hour
变量,其中包含以秒为单位的UNIX时间。
然后如果要格式化这个小时,我使用
date -u -d @$hour +"%Y-%m-%dT%H:%M:%S.000Z"
哪个有效。但是,我想将上面表达式的结果存储到另一个变量中,所以当我这样做时:
formatted=$(( date -u -d @$hour +"%Y-%m-%dT%H:%M:%S.000Z" ))
它不起作用。我不知道如何在评估表达式中引用hour
变量(无论它是什么)。
答案 0 :(得分:11)
表达式
formatted=$(( date -u -d @$hour +"%Y-%m-%dT%H:%M:%S.000Z" ))
使用仅适用于算术的$((
。将双括号更改为单个:
formatted=$( date -u -d @$hour +"%Y-%m-%dT%H:%M:%S.000Z" )
后者适用于字符串。
供参考(这些是POSIX shell功能,而不是特定于bash):
答案 1 :(得分:1)
command substitution的语法巧妙错误。在$
之后使用双括号在Bash中引入了一个非常独特的上下文,称为arithmetic context。
所以只需放下一对括号。
formatted=$(date -u -d @$hour +"%Y-%m-%dT%H:%M:%S.000Z")
使用反引号在语法上是有效的,但是discouraged。
formatted=`date -u -d @$hour +"%Y-%m-%dT%H:%M:%S.000Z"`
答案 2 :(得分:0)
您可以按照以下方式执行此操作:
hour=1447409296 #Whatever timestamp value you want to set
formatted=`date -u -d @$hour +"%Y-%m-%dT%H:%M:%S.000Z"`
echo $formatted
或:
formatted=`date -u -d @$hour +"%Y-%m-%dT%H:%M:%S.000Z"`