Ich habe gesehen history | grep blah
und history |grep blah
; und history|grep blah
funktioniert auch, obwohl niemand es jemals zu benutzen scheint.
Gibt es eine Bedeutung in den Leerzeichen (z. B. erfordert das Weiterleiten von / zu verschiedenen Befehlen eine unterschiedliche Verwendung von Leerzeichen), oder ist dies immer willkürlich?
|
Pipe oder;
Semikolon werden von den meisten Shell (bash, ksh, tcsh) als Trennzeichen für Befehle verwendet. wenn nicht in Anführungszeichen eingeschlossen, sind Leerzeichen vor und nach irrevelent.Antworten:
bash
definiert mehrere Metazeichen . Vonman bash
:Da Metazeichen Wörter trennen, spielt es keine Rolle, ob sie von Leerzeichen umgeben sind. Das Pipe-Symbol
|
ist ein Metazeichen und benötigt daher, wie Sie bemerkt haben, keine Leerzeichen.Beachten Sie, dass
[
,]
,{
,}
, und=
sind nicht Metazeichen. Ihre Bedeutung hängt dagegen stark davon ab, ob sie von Leerzeichen umgeben sind.Beispiele, wann Leerzeichen benötigt werden und wann nicht
Wie Sie bemerkt haben, spielt es keine Rolle, ob
|
es von Leerzeichen umgeben ist. Betrachten wir einige Beispiele, die Bash-Benutzer häufig verwirren. Erwägen:Die obigen Parens erzwingen, dass der
date
Befehl in einer Subshell ausgeführt wird. Da(
und)
Metazeichen sind, werden keine Leerzeichen benötigt. Im Gegensatz:Da
{
und}
sind nicht Metazeichen, die Shell behandelt{date}
als ein Wort. Anstatt nach demdate
Befehl zu suchen , wird nach einem Befehl mit dem Namen gesucht{date}
. Da es keinen findet, kommt es zu einem Fehler.Ein weiteres häufiges Problem ist der
test
Befehl. Folgendes funktioniert erfolgreich:Entfernen Sie die Leerzeichen und ein Fehler tritt auf:
Da
[
und]
sind nicht Metazeichen, die Shell behandelt[.bashrc]
als ein einzelnes Wort , und das Ergebnis, wie in demdate
Beispiel ist ein Fehler.Zuweisungsanweisungen reagieren auch empfindlich auf Leerzeichen. Die folgende Zuordnung ist erfolgreich:
Fügen Sie ein Leerzeichen hinzu und die Zuweisung schlägt fehl:
Oben wird die Shell vorübergehend
v
auf leer gesetzt und führt dann dendate
Befehl aus.Das Hinzufügen eines Leerzeichens vor
=
verursacht ebenfalls einen Fehler, jedoch aus einem anderen Grund:Hier versucht die Shell, den Befehl
v
mit dem Argument auszuführen=date
. Der Fehler liegt daran, dass kein benannter Befehl gefunden wurdev
.quelle
=
. Das Debuggen hat eine Weile gedauert.Mit Pipes können Sie die Ausgabe eines Programms als Eingabe eines anderen Programms verwenden ...
In Bezug auf Leerzeichen ist es nur eine Frage der Lesbarkeit / Personalpräferenz, wie @ jasonwryan erwähnt.
Eine Leertaste vor und nach "|" ist die Norm ....
Sie können es auch mit Spalte -t verwenden, um nicht nur Ihren einen Liner sauber zu machen, sondern auch Ihre Ausgabe.
quelle
Es gibt einen Fall, in dem es nützlich sein kann, keine Leerzeichen zu verwenden. Wenn Sie kein US-amerikanisches Layout verwenden, müssen Sie möglicherweise einige Kombinationen verwenden, AltShiftLum eine Pipe einzugeben. Dies ist zwar per se kein Problem, aber eine Konsequenz ist, dass Sie manchmal auch nicht druckbare Zeichen vor oder nach diesem Zeichen eingeben. Zum Beispiel auf einer französisch Macbook Pro Tastatur, habe ich zu verwenden AltShiftLzur Eingabe
|
. Wenn Sie schnell tippen, können Sie versehentlich Folgendes eingeben: AltShift( L, Space)Wenn Sie nicht wissen, dass Sie AltShiftSpaceein anderes Leerzeichen eingeben (das nicht unterbrechende Leerzeichen ( U + 00A0 )), ist der folgende Fehler möglicherweise schwer zu verstehen:
zsh: command not found: tail
quelle
Die einzige Bedeutung von Räumen ist in diesem Fall die Ästhetik.
Oder mit anderen Worten nützlich, um die Befehle für einen Menschen lesbarer zu machen.
quelle