Antworten:
In bash (> = 4.2) ist es vorzuziehen, den in printf integrierten Datumsformatierer (Teil von bash) anstelle des externen date(normalerweise GNU-Datums) zu verwenden.
So wie:
# 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
In Bash (<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')
Andere verfügbare Datumsformate können vom betrachtet werden Datum Manpages (für externen Nicht-bash bestimmten Befehl):
man date
              +%F %Tals Verknüpfung verwenden +%Y-%m-%d %H:%M:%S. Es genügt zu bemerken , dass einige Dateisysteme (Husten ** HFS) die konvertieren :zu einem /, eine Zeichenkette wie das Geben 2016-09-15 11/05/00der mächtig ist verwirrend.
                    date=$(date)anstelle von date=`date`. Verwenden Sie für Ihre privaten Variablen auch keine Großbuchstaben. Variablennamen in Großbuchstaben sind für das System reserviert.
                    Versuchen: $(date +%F)
Sie können so etwas tun:
$ date +'%Y-%m-%d'
              Sie suchen nach dem ISO 8601- Standard-Datumsformat. Wenn Sie also ein GNU-Datum (oder einen Datumsbefehl, der moderner als 1988 ist) haben, tun Sie einfach Folgendes:$(date -I)
date -Ihabe nicht funktioniert. Die Installation von GNU-Coreutils mit Brew (das das Präfix 'g' verwendet) gdate -Ihat funktioniert.
                    -Ifür GNU dokumentierte Option nicht finden date, obwohl sie sicher gleichwertig zu sein scheint date +%F.
                    date -d '1 hour ago' '+%Y-%m-%d'
Die Ausgabe wäre 2015-06-14.
%.
                    $(date +%F_%H-%M-%S)
kann verwendet werden, um Doppelpunkte (:) dazwischen zu entfernen
Ausgabe
2018-06-20_09-55-58
              Mit dem neuesten Bash (Version ≥ 4.2) können Sie das integrierte printfFormat mit dem Formatmodifikator verwenden %(strftime_format)T:
$ printf '%(%Y-%m-%d)T\n' -1  # Get YYYY-MM-DD (-1 stands for "current time")
2017-11-10
$ printf '%(%F)T\n' -1  # Synonym of the above
2017-11-10
$ printf -v date '%(%F)T' -1  # Capture as var $date
printfist viel schneller als dateda es sich um einen eingebauten Bash handelt, während datees sich um einen externen Befehl handelt.
Auch printf -v date ...ist schneller als date=$(printf ...)da es nicht erforderlich ist, eine Unterschale zu gabeln.
datewenn Sie ihn bereits in einem Bash-Skript verwenden, da keine zusätzlichen Bibliotheken geladen werden müssen. (* Ich habe auf meinem Linux-Server einen Geschwindigkeitsunterschied von ~ 160x über 1000 Iterationen gemessen)
                    printf -v dateVerzweigen einer Unterschale. Sehr gute Infos !!
                    #!/bin/bash -e
x='2018-01-18 10:00:00'
a=$(date -d "$x")
b=$(date -d "$a 10 min" "+%Y-%m-%d %H:%M:%S")
c=$(date -d "$b 10 min" "+%Y-%m-%d %H:%M:%S")
#date -d "$a 30 min" "+%Y-%m-%d %H:%M:%S"
echo Entered Date is $x
echo Second Date is $b
echo Third Date is $c
Hier ist x das verwendete Beispieldatum und das Beispiel zeigt sowohl die Formatierung der Daten als auch das Abrufen von Daten an, die 10 Minuten über dem aktuellen Datum liegen.
Ich benutze die folgende Formulierung:
TODAY=`date -I`
echo $TODAY
In der Manpage datefinden Sie eine Reihe weiterer nützlicher Optionen:
man date