Der richtige Ansatz besteht darin, Ihre eigene Funktion in Ihrem Bash-Skript zu definieren.
function my_date {
date "+%y-%m-%d %H:%M:%S"
}
Jetzt können Sie my_date
verwenden als wäre es ein externes Programm.
Zum Beispiel:
echo "It is now $(my_date)."
Oder einfach:
my_date
Warum funktioniert Ihr Ansatz nicht?
Das erste Problem ist, dass Ihre Zuweisung fehlerhaft ist.
DATE_COMMAND="date "+%y-%m-%d %H:%M:%S""
Dies wird als Zuweisung des Strings date +%y-%m-%d
geparst in die Variable DATE_COMMAND
. Nach dem Leerzeichen beginnt die Shell, die verbleibenden Symbole auf eine Weise zu interpretieren, die Sie nicht beabsichtigt haben.
Dies könnte teilweise durch eine Änderung des Zitats behoben werden.
DATE_COMMAND="date '+%y-%m-%d %H:%M:%S'"
Dies löst das Problem jedoch nicht wirklich, denn wenn wir jetzt
verwendenecho $($DATE_COMMAND)
Es wird das Argument nicht korrekt erweitern. Die date
Programm sieht die Argumente '+%y-%m-%d
und %H:%M:%S'
(mit Anführungszeichen) anstelle einer einzelnen Zeichenfolge. Dies könnte mit eval
gelöst werden wie in
DATE_COMMAND="date '+%y-%m-%d %H:%M:%S'"
echo $(eval $DATE_COMMAND)
wobei die Variable DATE_COMMAND
wird zunächst zum String date '+%y-%m-%d %H:%M:%S'
expandiert das ist dann eval
so geschrieben, als ob es so geschrieben wäre, wodurch date
aufgerufen wird richtig.
Beachten Sie, dass ich dies nur zeige, um das Problem zu erklären. eval
ist hier keine gute Lösung. Verwenden Sie stattdessen eine Funktion.
PS:Es ist besser, Bezeichner-Strings in Großbuchstaben zu vermeiden, da diese oft im Konflikt mit Umgebungsvariablen stehen oder sogar eine magische Bedeutung für die Shell haben.
Dem Raum zu entfliehen funktioniert für mich.
echo `date +%d.%m.%Y\ %R.%S.%3N`