Ein Backslash außerhalb von Anführungszeichen bedeutet, dass das nächste Zeichen beim Parsen buchstäblich interpretiert wird. Da .
ist ein gewöhnliches Zeichen für den Parser, \.
wird auf die gleiche Weise analysiert wie .
und ruft das Builtin auf .
(wofür source
in bash ein Synonym steht).
Es gibt einen Fall, in dem dies einen Unterschied machen könnte. Wenn ein Benutzer einen .
zuvor aufgerufenen Alias definiert hat .profile
und .profile
in einer Shell gelesen wird, die Aliase erweitert (was Bash standardmäßig nur beim interaktiven Aufruf ausführt ), .
würde er den Alias auslösen, aber \.
trotzdem den eingebauten Alias auslösen, da die Shell Versucht nicht, Alias-Erweiterungen für Wörter vorzunehmen, die in irgendeiner Weise zitiert wurden.
Ich vermute, dass dies .
in geändert wurde, \.
weil sich ein Benutzer beschwert hat, nachdem er einen Alias für erstellt hatte .
.
Beachten Sie, dass \.
eine aufgerufene Funktion aufgerufen würde .
. Vermutlich sind Benutzer, die Funktionen schreiben, besser informiert als Benutzer, die Aliase schreiben, und wissen, dass die Neudefinition eines Standardbefehls .profile
eine schlechte Idee ist, wenn Sie Code von Drittanbietern einbinden. Wenn Sie jedoch sowohl Aliase als auch Funktionen umgehen möchten, können Sie schreiben command .
. Der Autor dieses Snippets tat dies auch nicht, weil er sich für antike Muscheln interessierte, die nicht über die command
eingebaute Technologie verfügten, oder weil er sich dessen wahrscheinlich nicht bewusst war.
Das Definieren eines Alias in .profile
ist übrigens eine schlechte Idee, da .profile
es sich um ein Sitzungsinitialisierungsskript und nicht um ein Shell- Initialisierungsskript handelt. Aliase für Bash gehören in .bashrc
.
Gilles 'SO - hör auf böse zu sein'
quelle