Създайте временна променлива в bash скрипта

Опитвам се да създам променлива във времевата маркировка в скрипта, за да направя записването малко по-лесно. Искам да създам променлива в началото на скрипта и да отпечатам текущото време, когато издавам echo $timestamp . Оказа се, че е по-трудно, отколкото си мислех. Ето няколко опита:

timestamp="(date +"%T")" ехо изходи (date +"%T")

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

Другите неща, които опитах, са само незначителни промени, които не са се подобрили. Някой знае ли как да постигне това, което се опитвам да направя?

206
12 июня '13 в 16:03 2013-06-12 16:03 dan08 настроен на 12 юни 13 в 4:03 2013-06-12 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 . За date GNU можете да намерите пълен списък на тези спецификатори в официалната документация тук: https://www.gnu.org/software/coreutils/manual/html_node/Time-conversion-specifiers.html#Time-conversion-specifiers

165
12 июня '13 в 16:06 2013-06-12 16:06 отговорът е даден от giordano на 12 юни '13 в 16:06 2013-06-12 16:06

Ако искате да получавате UNIX времеви клейма, трябва да използвате:

 timestamp=$(date +%s) 
border=0

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

337
13 нояб. Отговорът е даден дчакаров 13 ноември. 2013-11-13 16:01 '13 в 16:01 2013-11-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 2017-03-30 13:19 Отговорът е даден от Girdhar Singh Rathore на 30 март 2017 г. в 13:19 2017-03-30 13:19

Използвайте подмяна на команда:

 timestamp=$( date +%T ) 
11
12 июня '13 в 16:06 2013-06-12 16:06 отговорът е даден choroba 12 юни '13 в 16:06 2013-06-12 16:06

Можете да използвате

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

2014-02-01 15:12:35-05:00 във формат 2014-02-01 15:12:35-05:00

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

6
01 февр. Отговорът е даден от законопроект 01 февруари. 2014-02-01 23:16 '14 в 23:16 2014-02-01 23:16
 timestamp=$(awk 'BEGIN {srand(); print srand()}') 

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

1
28 дек. Отговорът е даден от Стивън Пени 28 декември. 2016-12-28 05:15 '17 в 5:15 am 2016-12-28 05:15

Други въпроси относно или Задайте въпрос