Создайте временную переменную в bash script

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

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

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

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

206
задан 12 июня '13 в 16:03
источник поделиться
6 ответов

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

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

165
ответ дан 12 июня '13 в 16:06
источник

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

timestamp=$(date +%s)

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

337
ответ дан 13 нояб. '13 в 16:01
источник
DATE=`date "+%Y%m%d"`

DATE_WITH_TIME=`date "+%Y%m%d-%H%M%S"` #add %3N as we want millisecond too
13
ответ дан 30 марта '17 в 13:19
источник

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

timestamp=$( date +%T )
11
ответ дан 12 июня '13 в 16:06
источник

Вы можете использовать

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

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

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

6
ответ дан 01 февр. '14 в 23:16
источник
timestamp=$(awk 'BEGIN {srand(); print srand()}')

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

1
ответ дан 28 дек. '17 в 5:15
источник

Другие вопросы по меткам или Задайте вопрос