Создайте временную переменную в 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
Ответ 2
Если вы хотите получить временную метку unix, вам необходимо использовать:
timestamp=$(date +%s)
%T
даст вам только время; то же, что и %H:%M:%S
(через http://www.cyberciti.biz/faq/linux-unix-formatting-dates-for-display/)
Ответ 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.