Ich habe Schwierigkeiten, einige Nuancen zwischen einfachen und doppelten Anführungszeichen in einem variablen Kontext herauszufinden
Ich definiere:
foo=pwd
Führen Sie dann diese aus:
echo $'$foo'
Welche Echos $foo
(dh das erste $
in meinem Echo-Befehl wird gelöscht)
echo $"$foo"
Dieses Echo pwd
(was bedeutet, dass die Bash $foo
, meine Variable, auf ihren Wert erweitert wird)
echo $`$foo`
Endlich dieses Echo $~/scripts
(ich habe erwartet, dass es gedruckt wird ~/scripts
und nicht $~/scripts
)
Kann mir jemand helfen, diese Unterschiede herauszufinden?
command-line
bash
scripts
Ilan
quelle
quelle
Erster Fall:
Der erste
$
wird als Befehl ausgeführt. Echo benötigt keine Leerzeichen zwischen den Argumenten, sondern nur diese.Echo wird also
$'$foo'
erweitert, um den Befehl auszuführen$
(der kein Befehl ist, also ignoriert er ihn) und dann echo'$foo'
. Alles, was aufgenommen''
wird, wird zum Nennwert genommen - es erweitert es nicht oder so. Sie können eingeben, was Sie wollen, und nichts passiert.Wenn Sie ersetzen die
$
mit$$
ihm Echos der Prozess - ID.Zweite:
Das liegt daran
""
, dass es sich nicht ausdehnt.""
wird normalerweise verwendet, um sicherzustellen, dass ein Wert zum Vergleichen vorhanden ist.Wenn Sie eine Variable haben, die leer sein könnte (z. B.
grep
aufgrund eines Ergebnisses), und Sie sie mit einem anderen Wert / einer anderen Variablen vergleichen möchten, müssen Sie die erste Variable eingeben""
. Dies stellt sicher, dass immer ein Vergleich zu überprüfen ist und nicht nur ein leerer Codeabschnitt (wie Bash sieht), der einen Fehler ausgibt.Schließlich Nummer 3. Das ist interessant.
Das liegt daran, dass (in diesem Fall) das Echo
$
zuerst das Zeichen druckt. Wenn Sie etwas in Backticks einfügen, wird der Wert der Variablen als Befehl ausgeführt (in neueren Versionen von bash ist dies besser möglich$(command)
).Also hallt
$
es zuerst, dann erweitert es sich,`$foo`
zu`pwd`
dem es ausgeführt wird, und kehrt zurück~/Scripts
. Aber wir hatten den$
Druck früher - also ist die gesamte Ausgabe$~/Scripts
.quelle