Linux shell表达式中的变量

Linux shell表达式中的变量,linux,bash,shell,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变量(不管它叫什么)。表达式 formatted=$(( d

我在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
变量(不管它叫什么)。

表达式

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的):

  • 讨论
    $(
  • 讨论
    $(
    • 表达式

      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的):

      • 讨论
        $(
      • 讨论
        $(

      您可以按以下方式执行:

      hour=1447409296  #Whatever timestamp value you want to set
      formatted=`date -u -d @$hour +"%Y-%m-%dT%H:%M:%S.000Z"`
      echo $formatted
      
      或:


      您可以按以下方式执行此操作:

      hour=1447409296  #Whatever timestamp value you want to set
      formatted=`date -u -d @$hour +"%Y-%m-%dT%H:%M:%S.000Z"`
      echo $formatted
      
      或:

      您的语法有点错误。
      $
      后面使用双括号在Bash中引入了一个非常独特的上下文,称为

      因此,只需去掉一对括号

      formatted=$(date -u -d @$hour +"%Y-%m-%dT%H:%M:%S.000Z")
      
      backticks的使用在语法上是有效的,但是

      您的语法有点错误。
      $
      后面使用双括号在Bash中引入了一个非常独特的上下文,称为

      因此,只需去掉一对括号

      formatted=$(date -u -d @$hour +"%Y-%m-%dT%H:%M:%S.000Z")
      
      backticks的使用在语法上是有效的,但是


      @Bernhard,因为它是在另一个答案中建议的。@Bernhard,因为它是在另一个答案中建议的。