Ich bin ein neuer Ingenieur, der gerade angefangen hat, Bash zu schreiben. Ich codiere ** "Oh, hier einfache Anführungszeichen? Doppelte? Ist es notwendig, es überhaupt zu umgeben? Nun, es ist egal, ob es sich bewegt ..." ** Ich mache mir darüber immer Sorgen, deshalb habe ich beschlossen, es wieder zu organisieren.
OK mit der folgenden Erkennung. Details werden später einzeln erklärt.
Wenn Sie eine Zeichenfolge in einfache Anführungszeichen setzen, verliert jedes Zeichen in der Zeichenfolge seine spezielle Bedeutung und wird als wörtliche Bedeutung interpretiert.
# $HOME ist eine spezielle Shell-Variable, die das Home-Verzeichnis des Benutzers festlegt, der die Shell ausführt.
$ echo '$HOME' #Mit einfachen Anführungszeichen umgeben
$HOME #Wie es ist$Ausgabe als HOME
$ echo "$HOME" #In doppelte Anführungszeichen setzen
/c/Users/guest.name #Wird auf den Wert einer Shell-Variablen erweitert
$ echo '*' #Mit einfachen Anführungszeichen umgeben
* #Wie es ist*Wird ausgegeben
$ echo * #Zitiere nichts
bin doc src #Erweitert auf den Dateinamen im aktuellen Verzeichnis
Wenn Sie eine Zeichenfolge in doppelte Anführungszeichen setzen, verlieren die meisten Zeichen ihre besondere Bedeutung, ähnlich wie einfache Anführungszeichen. Die speziellen Bedeutungen von \ $ und `bleiben jedoch erhalten, sodass die Parametererweiterung und die Befehlssubstitution durchgeführt werden. ** Es scheint besser, "\ $ variables" und "\ $ (Befehlsersetzung)" in doppelte Anführungszeichen zu setzen, um unerwartetes Verhalten zu verhindern. ** **.
#Parametererweiterung
$ var='*** hello world ***' #Mit einer Reihe von Räumen*String mit
$ echo "$var" #In doppelte Anführungszeichen setzen
*** hello world *** #Richtig angezeigt
$ echo $var #Nicht in doppelte Anführungszeichen setzen
bin doc src hello world bin doc src #Das Leerzeichen wird als Trennzeichen interpretiert und der Dateiname des aktuellen Verzeichnisses wird vorher und nachher erweitert.
#Befehl ersetzen
$ user='$(whoami)' #Mit einfachen Anführungszeichen umgeben
$ echo "$user"
$(whoami) #Nur als Zeichenfolge interpretiert
$ user="$(whoami)" #In doppelte Anführungszeichen setzen
$ echo "$user"
guest.name #Das Ergebnis des whoami-Befehls wird zugewiesen
Wenn Sie einen Backslash vor ein Zeichen setzen, verliert das eine Zeichen unmittelbar nach dem \ seine spezielle Bedeutung und wird als wörtliche Bedeutung interpretiert.
$ echo \$HOME # $Setzen Sie einen Schrägstrich vor
$HOME #Wie es ist$Ausgabe als HOME
$ echo $HOME #Ich muss einen Back Slash hinzufügen
/c/Users/guest.name #Wird auf den Wert einer Shell-Variablen erweitert
$ echo \* # *Setzen Sie einen Schrägstrich vor
* #Wie es ist*Wird ausgegeben
$ echo * #Ich muss einen Back Slash hinzufügen
bin doc src #Erweitert auf den Dateinamen im aktuellen Verzeichnis
Referenz: Takenori Yamamori "[Überarbeitete 3. Ausgabe] Shell Script Basic Reference ── #! / Bin / sh kann dies" Technical Review Company (2018/11/14)