首页 文章

在bash脚本中创建时间戳变量

提问于
浏览
269

我试图在shell脚本中创建一个时间戳变量,以使日志记录更容易一些 . 我想在脚本的开头创建变量,并在我发出 echo $timestamp 时打印出当前时间 . 事实证明,这比我想象的要困难得多 . 以下是我尝试过的一些事情:

timestamp="(date +"%T")" echo打印出 (date +"%T")

timestamp="$(date +"%T")" echo打印变量初始化的时间 .

我尝试过的其他事情只是轻微的变化,没有任何改善 . 有谁知道如何完成我想要做的事情?

8 回答

  • 1

    为了获得当前时间戳而不是定义固定变量的时间,诀窍是使用函数和 not 变量:

    #!/bin/bash
    
    # Define a timestamp function
    timestamp() {
      date +"%T"
    }
    
    # do something...
    timestamp # print timestamp
    # do something else...
    timestamp # print another timestamp
    # continue...
    

    如果您不喜欢 %T 说明符给出的格式,则可以组合 date 接受的其他时间转换说明符 . 对于GNU date ,您可以在官方文档中找到这些说明符的完整列表:https://www.gnu.org/software/coreutils/manual/html_node/Time-conversion-specifiers.html#Time-conversion-specifiers

  • 14

    如果你想获得unix时间戳,那么你需要使用:

    timestamp=$(date +%s)
    

    %T 会给你一点时间;与 %H:%M:%S 相同(通过http://www.cyberciti.biz/faq/linux-unix-formatting-dates-for-display/

  • 227
    DATE=`date "+%Y%m%d"`
    
    DATE_WITH_TIME=`date "+%Y%m%d-%H%M%S"` #add %3N as we want millisecond too
    
  • 32

    使用命令替换:

    timestamp=$( date +%T )
    
  • 8

    您可以使用

    timestamp=`date --rfc-3339=seconds`
    

    这提供 2014-02-01 15:12:35-05:00 格式

    反向标记( ``` )字符将导致它们之间的内容被评估并将结果包含在该行中 . date --help 还有其他选择 .

  • 9

    ISO 8601格式( 2018-12-23T12:34:56 )比UNIX时间戳更具可读性 . 但是在某些操作系统上,文件名中不能包含 : . 因此我建议使用这样的东西:

    2018-12-23_12-34-56
    

    您可以使用以下命令以此格式获取时间戳:

    date +%Y-%m-%d_%H-%M-%S
    

    这是我见过许多应用程序使用的格式 . 另一个好处是,如果你的文件名以此开头,你可以按字母顺序对它们进行排序,它们将按日期排序 .

  • 430

    我使用的是ubuntu 14.04 .

    我系统中的正确方法应该是 date +%s .

    date +%T 的输出类似于 12:25:25 .

  • 6
    timestamp=$(awk 'BEGIN {srand(); print srand()}')
    

    没有值的srand使用大多数Awk实现的当前时间戳 .

相关问题