Bash: Warum fügt echo zusätzlichen Speicherplatz hinzu?

8

Ich bekomme:

%Vor%

Hinweis: Die zusätzlichen Leerzeichen vor Db und Dc in der 2. und 3. Zeile des Ausgangs.

Warum sind diese da?

Danke, Dan

Bearbeiten : Da mein eigentliches Ziel Leerzeichen enthielt (die ich eigentlich hätte schreiben sollen):

%Vor%

Die meisten Lösungen hier funktionierten nicht für mich (for loop, xarg, tr). Printf funktionierte nicht wegen mehrerer geschweifter Klammern, die ich zum cantesischen Produkt haben möchte.

Ich habe 3 Lösungen kombiniert (memberle's \ b, Dennis Williamson's extra Leerzeichen, und Jim Dennis benutzt weit weniger Zitate) um zu bekommen:

%Vor%

Danke allen, die geantwortet haben! Ich habe viel von deinen Antworten gelernt!

Dan

    
Dan 05.01.2010, 01:19
quelle

6 Antworten

0

Die einfachste und sauberste Lösung ist das Hinzufügen einer Rücktaste zum Anfang jeder Zeile:

%Vor%

Dies erzeugt die gewünschte Ausgabe.

    
mletterle 05.01.2010, 01:53
quelle
9

Verwenden Sie das tragbarere printf

%Vor%     
ghostdog74 05.01.2010 01:54
quelle
9

Weil das die Klammerextension ist. Von man bash , unter der Überschrift Brace expansion :

  

Muster, die geschweift werden sollen, nehmen die   Form eines   optionale Präambel, gefolgt von ... einer Reihe von durch Kommas getrennten   Strings ... gefolgt von einem optionalen   Nachschrift. Die Präambel ist vorangestellt   zu jeder Zeichenfolge innerhalb der   geschweifte Klammern, und das PostScript wird dann an jeden resultierenden Anhang angehängt   Zeichenfolge, von links nach rechts expandierend   Zum Beispiel expandiert ein {d, c, b} e in   'Ade ace abe'

Also in Ihrem Beispiel ist "D" die Präambel und ".jpg \ n" ist das Postscript.

Nach der Erweiterung der Klammer bleibt also:

echo -e Da.jpg\n Db.jpg\n Dc.jpg\n

Wie Hewgill darauf hinweist , die Shell teilt es dann in drei Tokens auf und übergibt sie an Echo; welches jedes Token durch ein Leerzeichen getrennt ausgibt. Um die gewünschte Ausgabe zu erhalten, müssen Sie hier einen der vielen Vorschläge verwenden, die den unerwünschten Abstand zwischen den Tokens nicht wieder einfügen.

Es ist länger und wahrscheinlich nicht der beste Weg, dies zu tun, aber das Folgende gibt die Ausgabe, nach der Sie suchen:

%Vor%     
James Polley 05.01.2010 01:23
quelle
4

echo fügt immer Leerzeichen zwischen Argumenten hinzu. Versuchen Sie Ihren Befehl ohne \n und vergleichen Sie die Ergebnisse.

    
Greg Hewgill 05.01.2010 01:22
quelle
2

Sie können den gewünschten Effekt erzielen, indem Sie die Argumente, die durch das erste Echo gespuckt werden, mit xargs in jeweils eine Zeile trennen:

%Vor%     
alvherre 05.01.2010 01:42
quelle
1

Sie können ein konsistenteres Aussehen erhalten, indem Sie eine Null voranstellen:

%Vor%

Jetzt haben sie alle einen zusätzlichen Platz. Außerdem wird mit -n der zusätzliche Zeilenumbruch am Ende entfernt. Sie können auch einen Bereich in Ihrer geschweiften Klammer verwenden.

    
Dennis Williamson 05.01.2010 02:46
quelle

Tags und Links