Próbowałem użyć $(date)
w skrypcie powłoki bash, jednak chcę mieć datę w YYYY-MM-DD
formacie.
Jak mogę to zdobyć?
1108
W bash (> = 4.2) lepiej jest używać wbudowanego formata daty printf (część bash) niż zewnętrznego date
(zwykle data GNU).
Takie jak:
# put current date as yyyy-mm-dd in $date
# -1 -> explicit current date, bash >=4.3 defaults to current time if not provided
# -2 -> start time for shell
printf -v date '%(%Y-%m-%d)T\n' -1
# put current date as yyyy-mm-dd HH:MM:SS in $date
printf -v date '%(%Y-%m-%d %H:%M:%S)T\n' -1
# to print directly remove -v flag, as such:
printf '%(%Y-%m-%d)T\n' -1
# -> current date printed to terminal
W uderzeniu (<4,2):
# put current date as yyyy-mm-dd in $date
date=$(date '+%Y-%m-%d')
# put current date as yyyy-mm-dd HH:MM:SS in $date
date=$(date '+%Y-%m-%d %H:%M:%S')
# print current date directly
echo $(date '+%Y-%m-%d')
Inne dostępne formaty daty można przeglądać na stronach podręcznika daty (dla zewnętrznego polecenia nieobsługującego bash):
man date
+%F %T
jako skrótu+%Y-%m-%d %H:%M:%S
. Zauważ, że niektóre systemy plików (kaszel ** HFS) przekonwertują:
plik na a/
, dając ci taki ciąg znaków,2016-09-15 11/05/00
który może być mylący.date=$(date)
zamiastdate=`date`
. Nie używaj także wielkich liter do zmiennych prywatnych; nazwy zmiennych pisane wielkimi literami są zarezerwowane dla systemu.Próbować:
$(date +%F)
źródło
Możesz zrobić coś takiego:
źródło
Szukasz standardowego formatu daty ISO 8601 , więc jeśli masz datę GNU (lub dowolne polecenie daty bardziej nowoczesne niż 1988), po prostu wykonaj:
$(date -I)
źródło
date -I
nie działałem. Po zainstalowaniu GNU coreutils za pomocą brew (który używa przedrostka „g”)gdate -I
działało.-I
opcji udokumentowanej dla GNUdate
, chociaż na pewno wydaje się, że jest równoważnadate +%F
.Wynik byłby
2015-06-14
.źródło
%
.może służyć do usuwania dwukropków (:) pomiędzy
wynik
źródło
W najnowszej wersji Bash (wersja ≥ 4.2) możesz używać wbudowanego
printf
modyfikatora formatu%(strftime_format)T
:printf
jest znacznie szybszy niżdate
ponieważ jest wbudowanym Bash, podczas gdydate
jest poleceniem zewnętrznym.Co więcej,
printf -v date ...
jest szybszy niż,date=$(printf ...)
ponieważ nie wymaga rozwidlania podpowłoki.źródło
date
jeśli używasz go już ze skryptu bash, ponieważ nie musi on ładować żadnych dodatkowych bibliotek. (* Zmierzyłem na moim serwerze linuksowym ~ 160x różnica prędkości ponad 1000 iteracji)printf -v date
nie rozwidlaniu podpowłoki. Bardzo dobra informacja !!Ilekroć mam takie zadanie, wracam do niego
przypominać sobie o wszystkich możliwościach.
źródło
jeśli chcesz, aby rok był w formacie dwucyfrowym, takim jak 17 zamiast 2017, wykonaj następujące czynności:
źródło
Tutaj x jest użytą datą próbną, a następnie przykład wyświetla zarówno formatowanie danych, jak i uzyskiwanie dat o 10 minut więcej niż bieżąca data.
źródło
Używam następującego sformułowania:
Sprawdź stronę podręcznika
date
, ponieważ istnieje wiele innych przydatnych opcji:źródło
Używam
$(date +"%Y-%m-%d")
lub$(date +"%Y-%m-%d %T")
z czasem i godzinami.źródło
Możesz ustawić datę jako zmienną środowiskową, a później możesz jej użyć
lub
źródło