Linux shell表达式中的变量

时间:2015-11-13 10:02:16

标签: linux bash shell

我在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变量(无论它是什么)。

3 个答案:

答案 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"`