Bash Manual sagt:
Wenn das [Formular verwendet wird, muss das letzte Argument für den Befehl a] sein.
$ type [
[ is a shell builtin
$ type ]
bash: type: ]: not found
Es ]
ist also weder ein reserviertes Wort noch ein Operator oder ein eingebauter Befehl.
Was ist als Token die Token-ID von ]
? WORT oder NAME?
[
ist (auch) ein autarker Befehl: -rwxr-xr-x 1 root root 39552 3. Dezember 18:14 / usr / bin / [Obwohl es möglich ist, dass auch "parallel" eingebaut ist, wie es für ist zum Beispielkill
. Auf einigen Systemen ist dertest
Befehl eine symbolische Verknüpfung zu[
oder umgekehrt. AFAIK]
bedeutet nichts für sich, wird aber akzeptiert, um ein "zu schließen"[
- aber es ist eher aus "ästhetischen" Gründen.[
es sich (auch) um einen in sich geschlossenen Befehl handelt, hat er normalerweise eine Manpage ... Versuchen Sie es alsoman [
mit / undman test
([
und estest
kann sich um denselben Befehl handeln).]
in einfache oder doppelte Anführungszeichen zu setzen, und Sie werden sehen, dass es keinen Unterschied macht. Es ist nur eine Schnur.Antworten:
]
Ergänzungen[
ist es das abschließende Zeichen des[
Befehls.Wie die
man
Seite hervorhebt, ist dies eigentlich ein Argument dafür[
,[
behandelt es aber besonders als Ende.Sie können es mit einigen anderen Befehlsschließmustern vergleichen, z. B.
;
infind .. exec
.quelle
]
?]
unterscheidet sich in diesem Zusammenhang nicht von anderen normalen Zeichen (als Argument für einen Befehl). Dertest
Befehl behandelt es speziell, aber das liegt am Befehl.[
löst einen Fehler aus, wenn das endgültige Argument nicht genau gleich ist]
.Bash behandelt die
[
oder]
Zeichen (allein) nicht anders als einen Buchstaben des Alphabets.In diesem Fall sieht bash ein "Wort"
[
und sucht nach einem Befehl mit diesem Namen. Wenn Sie in Ihr Dateisystem schauen, werden Sie wahrscheinlich feststellen, dass/bin/[
(oder/usr/bin/[
) als ausführbare Datei existiert. Bash bietet zwar auch eine integrierte Version (aus Gründen der Effizienz), dies ist jedoch nur ein Implementierungsdetail.Der
[
Befehl (wie in der ausführbaren Datei mit diesem Namen) hat die Regel, dass der letzte Parameter, den Sie an ihn übergeben, sein sollte,]
sonst wird ein Fehler ausgegeben. Dies mag teilweise daran liegen, dass es ästhetisch ansprechend ist, aber es dient auch dazu, Sie vor versehentlich abgeschnittenen Befehlen zu schützen, was sehr schön ist.Die Tatsache, dass dies nichts Besonderes ist, ist der Grund, warum Sie den Leerraum vor und nach dem
[
oder nicht weglassen können]
.Ausnahmen :
[
und]
im richtigen Format innerhalb desselben Wortes auftreten, z. B.[a-z]
dann ist das etwas Besonderes und es gelten die Globbing-Regeln von Bash.[[
Befehl ist etwas Besonderes und kann viele Dinge[
nicht (und die darin enthaltenen Parameter[[ .. ]]
werden ebenso wie einige Zeilenumbrüche unterschiedlich verarbeitet). Das Entsprechende]]
ist ebenfalls speziell, da es sich um ein Shell-reserviertes Wort handelt, das kein Befehlsname sein kann, und die spezielle Verarbeitung beendet, die auf das[[
Schlüsselwort folgt .quelle
;
oder>
, es ist nur ein eingebauter Befehl wiecd
. Insbesondere wenn Sie tippen[x
,[
hat das keine besondere Bedeutung.[
ist ein spezieller Befehl , es ist kein besonderes Zeichen .]]
ist es etwas Besonderes als]
. Bei der Verwendung[
und]
sie sind nur Wörter. Wenn Sie es weggelassen]
oder durch ein anderes Wort ersetzt haben, wird bash weiterhin ausgeführt[
, es[
wird jedoch ein Fehler ausgegeben. Jedoch[[
und]]
behandelt besondere beim Parsen. Wenn Sie durch]]
etwas anderes ersetzt haben, meldet bash einen Syntaxfehler. Und wenn Sie]]
bash weglassen würden, würden Sie die nächste Zeile weiter analysieren und nach dem suchen]]
.Einfacher ausgedrückt als die beiden vorherigen Antworten
]
ist nur eine Zeichenfolge,[
die ausgeführt werden muss.quelle