t\ime
oder \cd
(oder "tim"e
oder 'cd'
oder ${-##*}time
oder ${-+time}
und und jede andere Kombination von Zitaten und Erweiterungen, die Sie sich vorstellen können, würde sich irgendwann in time
oder auflösen cd
), ist das: eine andere Art zu schreiben cd
und time
.
Dies würde sich jedoch irgendwann zu cd
oder time
zu einem späteren Zeitpunkt der Analyse und Interpretation der Shell-Syntax auflösen . Dies geschieht insbesondere lange nach der Erkennung von Shell-Schlüsselwörtern und der Alias- Ersetzung.
Wenn die Shell nach Schlüsselwörtern in ihrer Sprache sucht, wird sie nicht ti\me
als time
Shell-Schlüsselwort erkannt . Also a:
ti\me echo test
würde von der Shell als einfacher Befehl erkannt werden, im Gegensatz zum time
Schlüsselwort, gefolgt von einem einfachen Befehl.
Dann würde das Anführungszeichen ti\me
verarbeitet (hier zitiert der Backslash das m
Zeichen, das ohnehin nicht zitiert werden muss, das Anführungszeichen wird entfernt, erhalten Sie time
), und ein time
Befehl würde wie alle anderen Befehle (in der Liste der eingebauten Befehle) nachgeschlagen , Funktionen und ausführbare Dateien in $PATH
. Höchstwahrscheinlich wird das /bin/time
hier sein)
Denn in der Shell-Sprache cd
gibt es kein cd
Schlüsselwort, nur einen cd
eingebauten Befehl (der Vorrang vor Ihrem hat /usr/bin/cd
). Wenn Sie jedoch einen Alias für cd
(like alias cd=pushd
) definieren, wiederholen Sie dies erneut. Da die Aliasersetzung sehr früh vor dem Entfernen des Anführungszeichens erfolgt, wenn Sie einen Alias für cd
und keinen für haben \cd
(beachten Sie, dass nicht viele Shells Aliase mit Backslashes zulassen), schreiben Sie Folgendes:
\cd dir
Sie stellen sicher, dass Ihr cd
Alias nicht ersetzt wird.
Kurz gesagt, zitierte einen Befehlsnamen oder einen Teil davon aus wird als Shell - Schlüsselwort gesehen verhindert (Keywords , die Dinge wie while
, for
, if
, {
... time
ist ein Schlüsselwort in einigen Schalen nur) und umgeht einen Alias Sie es haben kann .
Es erzwingt jedoch nicht, dass dieser Befehl in eine ausführbare Datei aufgelöst $PATH
wird. Der Befehl wird weiterhin zuerst zwischen Funktionen (die Sie umgehen können command time cmd...
) und integrierten Funktionen (die Sie umgehen können env time cmd...
, obwohl ich nichts weiß ) durchsucht eine Shell mit einem eingebauten time
Befehl).
Beachten Sie, dass das Zitieren auch das Verhalten der speziellen Buildins der typeset
/ declare
/ export
/ local
... -Familie in einigen Shells beeinflussen kann. Siehe Werden Anführungszeichen für die Zuweisung lokaler Variablen benötigt? für Details.