Создать переменную timestamp в скрипте bash

Я пытаюсь создать переменную timestamp в shell-скрипт, чтобы сделать ведение журнала немного легче. Я хочу создать переменную в начале скрипта и распечатать ее текущее время при каждом выпуске echo $timestamp. Это оказалось труднее, чем я думал. Вот некоторые вещи, которые я пробовал:

timestamp="(date +"%T")" Эхо выводит (date +"%T")

timestamp="$(date +"%T")" echo выводит время инициализации переменной.

другие вещи, которые я пробовал, просто небольшие вариации, которые не работали лучше. Кто-нибудь знает, как выполнить то, что я пытаюсь сделать?

8 ответов


чтобы получить текущую метку времени, а не время, когда определена фиксированная переменная, трюк заключается в использовании функции и не переменной:

#!/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


Если вы хотите получить метку времени unix, вам нужно использовать:

timestamp=$(date +%s)

%T даст вам только время; то же самое, что %H:%M:%S (via http://www.cyberciti.biz/faq/linux-unix-formatting-dates-for-display/)


DATE=`date "+%Y%m%d"`

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

использовать подстановку команд:

timestamp=$( date +%T )

можно использовать

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

это доставляет в формате 2014-02-01 15:12:35-05:00

спина-тики (`) символы приведут к тому, что между ними будет оцениваться и результат будет включен в строку. date --help есть и другие варианты.


формат ISO 8601 (2018-12-23T12:34:56) более читаем, чем временная метка UNIX. Однако на некоторых OSs вы не можете иметь : в именах файлов. Поэтому я рекомендую использовать что-то вроде этого:

2018-12-23_12-34-56

вы можете использовать следующую команду, чтобы получить метку времени в следующем формате:

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

это формат, который я видел во многих приложениях. Другая хорошая вещь об этом является то, что если имена файлов начинаются с этого, вы можете сортировать их по алфавиту, и они будут сортировка по дате.


Я использую ubuntu 14.04.

правильный путь в моей системе, должны быть date +%s.

выход date +%T как 12:25:25.


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

srand без значения использует текущую метку времени с большинством реализаций Awk.