Wie kann ich im Terminal eine neue Variable festlegen und ihr einen Wert zuweisen? Angenommen, ich möchte zwei Dateien mit langen Dateinamen vergleichen und dann auch einige andere Vorgänge ausführen. Aufgrund der langen Dateinamen möchte ich zwei Variablen erstellen, jeder Variable einen Wert zuweisen und sie als Platzhalter verwenden. Ich brauche so etwas wie das Folgende:
set var1 = 'long-file-name1'
set var2 = 'long-file-name2'
diff var1 var2
Antwort1
Der Pseudocode (oder Code für eine andere Shell oder Programmiersprache) in Ihrer Frage lässt sich in die folgenden Bash-Befehle übersetzen:
var1='long-file-name1'
var2='long-file-name2'
diff "$var1" "$var2"
Die Syntax $var1
istParametererweiterung. Dadurch wird die Variable var1
durch ihren Wert ersetzt, in diesem Fall durch den darin gespeicherten Dateinamen. Nicht in Anführungszeichen gesetzte ParametererweiterungsauslöserWorttrennung(auch „Feldaufteilung“ genannt) undGlotzen(auch „Dateinamenerweiterung“ und „Pfadnamenerweiterung“ genannt). Normalerweise möchten Sie nicht, dass diese weiteren Erweiterungen erfolgen.Außer wenn Sie genau wissen, dass Sie sie wollen, Du solltestBitte beifügenalle Vorkommen von Parametererweiterungen inAnführungszeichen. (Einzelzitatesind sogar noch mächtiger – sie würden auch eine Parametererweiterung verhindern.)
Dadurch wird der diff
Befehl mit dem in „passed“ gespeicherten Dateinamen var1
als erstem Befehlszeilenargument und dem in „ var2
passed“ gespeicherten Dateinamen als zweitem Befehlszeilenargument ausgeführt.Dies bewirkt diff
einen Vergleich der Inhalte der Dateien, wie Sie es beabsichtigen, genauso, als hätten Sie Folgendes ausgeführt:
diff 'long-file-name-1' 'long-file-name-2'
Sie werden feststellen, dass ich den Befehl nicht verwendet habe export
.Das liegt daran, dass der export
Befehl in diesem Fallweder notwendig noch angemessenfür das, was Sie tun. Wenn der Wert einer Variablen nur in Ihrer Shell erweitert werden muss - und nichtZugriff durch Programme, die von Ihrer Shell aus gestartet werden-- dann müssen (und sollten) Sie nicht verwenden export
.
Wenn Ihr System einen seltsamen diff
Befehl hätte, der Dateinamen aus Umgebungsvariablen namens var1
und liest var2
, anstatt Dateinamen als Befehlszeilenargumente zu verwenden, müssten Sie Ihre Variablen exportieren. Aber so diff
funktioniert es nicht. Der diff
Befehl greift nicht auf Ihre Variablen zu und weiß nichts über sie. Die Shell erweitert sie, um die Argumente zu erzeugen, die sie dann an übergibt diff
.
Antwort2
Sie können den Dateinamen in einer Variablen in Bash speichern, indem Sie ihn einfach zuweisen
Zum Beispiel:variable=filename && variable2=filename2
Sie können dann diff
die beiden Dateien mit diesen Variablen wie folgt
diff $variable $variable2
NB: Wenn Ihre Dateinamen Leerzeichen enthalten, sollten Sie sowohl die Dateinamen als auch die Variablen in doppelte Anführungszeichen setzen, insbesondere wenn Sie Operationen mit ihnen durchführen.