Ich möchte den date
Befehl mit einer netten Formatierung wie folgt ausführen:
$ date +"%Y-%m-%d %H:%M:%S"
2015-09-17 16:51:58
Ich möchte dies jedoch in einer Variablen speichern, sodass ich das Skript folgendermaßen aufrufen kann:
echo "$(nice_date) [WARNING] etc etc"
Es funktioniert jedoch nicht
$ nice_date="date +%Y-%m-%d %H:%M:%S"
$ echo "$($nice_date)"
date: extra operand ‘%H:%M:%S’
Try 'date --help' for more information.
$ nice_date="date +\"%Y-%m-%d %H:%M:%S\""
$ echo "$($nice_date)"
date: extra operand ‘%H:%M:%S"’
Try 'date --help' for more information.
$ nice_date='date +"%Y-%m-%d %H:%M:%S"'
$ echo "$($nice_date)"
date: extra operand ‘%H:%M:%S"’
Try 'date --help' for more information.
Was ist der richtige Weg, um dies zu tun, damit dieser Datumsbefehl ein korrektes Argument erhält?
"%F %T"
wenn Sie GNU verwendendate
.nice_date="date +%Y-%m-%d-%H:%M:%S"
, funktioniert es. Ich kann momentan nicht sehen, wie ich diesen Raum vor der zweiten Shell schützen kann.Antworten:
Der Grund, warum Ihr Beispiel fehlschlägt, ist die Art und Weise, wie die Wortteilung der Shell funktioniert. Wenn Sie ausführen
"$($nice_date)"
, führt die Shell dendate
Befehl mit zwei Argumenten"+%Y-%m-%d"
und aus"%H:%M:%S"
. Dies schlägt fehl, da die Formatzeichenfolge für Datum ein einzelnes Argument sein muss.Am besten verwenden Sie dazu eine Funktion, anstatt den Befehl in einer Variablen zu speichern:
Wenn Sie den Befehl wirklich in einer Variablen speichern möchten, können Sie ein Array verwenden:
Weitere Informationen zu den komplexen Fällen des Speicherns eines Befehls in einer Variablen finden Sie in BashFAQ 050 .
quelle
date: extra operand ‘’
Fehler mit beiden Ansätzen obenIch stimme zu, dass eine Funktion der beste Weg ist. Alternativ kann das Format auch als Variable und nicht als gesamter Befehl gespeichert werden:
quelle
echo
und die Befehlsersetzung sind auch überflüssig.Kürzeste Antwort ist
quelle
Eine einfache Möglichkeit besteht darin, dem Raum mit einem \
quelle
Bitte probieren Sie das Folgende aus:
Sie müssen das Symbol "` "hinzufügen, das sich auf der Tilde-Taste der Tastatur befindet. Das Symbol weist die Shell an, zuerst den Befehl auszuführen und dann der Variablen zuzuweisen.
quelle
Anstatt von:
Versuchen:
Außerdem benötigen Sie nicht die letzte Befehlsersetzung:
quelle
Hatte das gleiche Problem; musste ein Datum in einen awk-Abdruck stecken, damit es von splunk verarbeitet werden konnte. ich benutzte
dann
quelle