Bitte erläutern Sie, warum für die letzten vier Echoanweisungen 1 4 5 6 angezeigt wird. Ich habe dies einmal versehentlich getroffen, bin jetzt aber gespannt, warum dieses Verhalten auftritt.
Diese Aussagen funktionieren wie erwartet (für mich).
$ echo [ 9876543210 ]
[ 9876543210 ]
$ echo [237890]
[237890]
Diese Echoanweisungen zeigen konsistent 1 4 5 6 an. Haben diese Zahlen etwas Besonderes?
$ echo [9876543210]
1 4 5 6
$ echo [abcd9876543210ghi]
1 4 5 6
$ echo [-123456-]
1 4 5 6
$ echo [-7654321-]
1 4 5 6
Vielen Dank!
- Das mögliche Duplikat ist verwandt und hilfreich, aber kein Duplikat. Das mögliche Duplikat ist aus Sicht eines
rm
Befehls. Diese Frage ist aus der Perspektive eines wahrgenommenen "seltsamen Verhaltens" einesecho
Befehls. Die zugrunde liegende Antwort für beide ist Globbing. Jemand, der nach Problemen mit einemecho
Befehl sucht, würde dierm
Frage nicht leicht finden , aber wahrscheinlich hier landen.
1
4
5
und6
nullglob
, dass Ihr zweites Beispiel (echo [237890]
) beim Einschalten tatsächlich nichts ausgibt. Dies könnte ein Hinweis darauf sein, dass Sie in den anderen Beispielen eine Glob-Erweiterung festgestellt haben.Antworten:
Die offene Klammer
[
ist ein besonderer Charakter für die Muschel. Es öffnet sich ein Mustervergleichsalgorithmus, der besagt "Übereinstimmung mit einem der Zeichen in Klammern". Da sich in Ihrem aktuellen Verzeichnis 4 Dateien mit den Namen 1, 4, 5 und 6 befinden, ersetzt Ihre Shell die Musterübereinstimmung durch diese Dateinamen, wenn die Zeichen in den Klammern eine dieser Ziffern enthalten. Wenn Sie stattdessen verwendenecho [ 9876543210 ]
Sie Echo mit 3 Parametern aufrufen:[
,9876543210
, und]
.Sie sollten die Parameter Ihrer Echo-Anweisung in Anführungszeichen setzen, um zu verhindern, dass die Shell sie als Mustervergleichsanforderung ansieht.
(Oder entfernen Sie die Dateien mit den Namen 1, 4, 5 und 6 - aber das ist eine Problemumgehung, um das Verhalten zu demonstrieren, keine Fehlerbehebung).
quelle
echo [ 987 ]
Anrufeecho
mit drei Parametern, als auch nur zu erwähnentest
?echo
unterschiedlich interpretiert wird,bash
je nachdem, ob zwischen den eckigen Klammern und dem Inhalt Leerzeichen stehen oder nicht.[123]
vs.[ 123 ]
.