GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Bash - Datumsbefehl und Leerzeichen

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

verwenden
echo $($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` 

Linux
  1. Legen Sie Datum und Uhrzeit für jeden Befehl fest, den Sie im Bash-Verlauf ausführen

  2. Verlaufsbefehl, der das Verzeichnis und das Datum anzeigt?

  3. eval-Befehl in Bash und seine typischen Verwendungen

  4. Datumsvergleich in Bash

  5. Was ist der Unterschied zwischen &> und >&in bash?

Bash-Quellbefehl

Verlaufsbefehl in Linux (Bash-Verlauf)

Bash Exit-Befehl und Exit-Codes

Bash-printf-Befehl

So verwenden Sie den Datumsbefehl in Bash-Skripten unter Linux

Bash-Skripting (II)