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

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

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

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

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

Ответ 1

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

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

Ответ 3

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

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

Ответ 4

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

timestamp=$( date +%T )

Ответ 5

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

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

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

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

Ответ 6

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

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