Dies ist das Skript:
#!/bin/bash
thedate=$(date)
var='Current date is $thedate'
echo $var
Die Ausgabe lautet „Aktuelles Datum ist $thedate“ und ich möchte, dass das Datum angezeigt wird. Was habe ich falsch gemacht? Für jede Hilfe wäre ich dankbar.
Antwort1
Das Problem besteht darin, dass bash
Umgebungsvariablen nur einmal erweitert werden, es sei denn, Sie verwenden eval
, was dazu führt, dass die Befehlszeile zweimal analysiert wird:
eval echo $var
Beachten Sie, dass das angezeigte Datum und die Uhrzeit die aktuellen sind, wenn thedate
eingestellt wird, und nicht die, wenn $var
referenziert wird. Um die aktuelle Zeit anzuzeigen, wenn $var
referenziert wird, benötigen Sie:
var='Current date is $(date)'
eval echo $var
Es wäre besser, keine Variablen zu verwenden, sondern eine Funktion zu definieren:-
cdate() { echo Current date is $(date); }
...
cdate
Besser ist es natürlich trotzdem, nicht zu verwenden echo
, sondern date
den zusätzlichen Text selbst hinzuzufügen:
cdate() { date +"Current date is %c"; }
Die Ausgabe erfolgt nicht ganz im gleichen Format wie die date
Standardausgabe, es gibt jedoch keinen Formatbezeichner für die Standardausgabe.
Antwort2
var='Current date is $thedate'
Variablen werden in einfachen Anführungszeichen nicht erweitert. Daher wird hier ein String zugewiesen, der den wörtlichen Text enthält $thedate
. Sie sollten hier doppelte Anführungszeichen verwenden, um die Variable zu erweitern.
echo $var
Außerdem sollten Sie hier doppelte Anführungszeichen um die Variable setzen, um zu verhindern, dass sie einer Worttrennung und Pfadnamenerweiterung unterliegt, d. h. echo "$var"
. In diesem speziellen Fall können Sie größtenteils auf die Verwendung von Anführungszeichen verzichten, da das Datum wahrscheinlich keine Platzhalterzeichen enthält. Aber ohne Anführungszeichen würde die Datumszeichenfolge beispielsweise Fri Dec 7 20:41:21 EET 2018
als ausgegeben Fri Dec 7 20:41:21 EET 2018
, d. h. das doppelte Leerzeichen nach dem Monatsnamen würde zu einem einzelnen Leerzeichen reduziert.
Antwort3
Verwenden Sie doppelte Anführungszeichen statt einfacher Anführungszeichen. Bash erweitert Variablen in einfachen Anführungszeichen nicht.