Kurz gesagt, printf %100s
druckt 100 Leerzeichen und tr " " "="
konvertiert diese Leerzeichen in Gleichheitszeichen, wodurch effektiv 100 Gleichheitszeichen gedruckt werden.
Brechen sie ab:
printf
ist eine eingebaute Shell. Normalerweise werden zwei oder mehr Argumente benötigt, von denen das erste eine "Formatzeichenfolge" ist und der Rest verwendet wird, um Platzhalter in dieser Formatzeichenfolge auszufüllen. Sobald diese Vorlage vollständig ausgefüllt ist, wird das Ergebnis ausgedruckt. Wenn noch mehr Argumente übrig sind, wird von vorne begonnen, mehr Argumente aufgefüllt und die resultierende Zeichenfolge gedruckt.
Die für verwendete Formatzeichenfolge printf
nimmt Formatspezifikationen an, die %
mit einem einzelnen Buchstaben beginnen und enden. Dies %d
bedeutet eine Ganzzahl (unter Verwendung der Dezimalbasis, daher "d"), %f
eine Gleitkommazahl und %s
eine Zeichenfolge. Andere Zeichen als Buchstaben nach %
sind Modifikatoren für die Formatspezifikation und insbesondere Zahlen, um die angeforderte Länge des Feldes bei der Ausgabe anzugeben. So %100s
wird die String - Format mindestens 100 Zeichen zu haben, wird es Pad es mit Leerzeichen und es wird halten sie rechts ausgerichtet (in anderen Worten, fügen Sie Leerzeichen am Anfang des Strings.)
Wenn ein zusätzliches Argument übergeben wird, wird es für dieses %s
Feld verwendet, sodass beispielsweise printf %100s abc
97 Leerzeichen gedruckt werden (um insgesamt 100 zu erhalten, unter Berücksichtigung der 3 in "abc"), gefolgt von der tatsächlichen Zeichenfolge "abc". Wenn jedoch kein Argument angegeben wird, wird die Formatspezifikation mit einem leeren oder Null-Argument gefüllt (was eine leere Zeichenfolge ist, für %s
die es 0 wäre %d
usw.). Das ist also dasselbe, als ob eine leere Zeichenfolge übergeben wurde, wie z printf %100s ''
. Das Endergebnis ist, dass nur die 100-Zeichen-Auffüllung gedruckt wird.
Wenn Sie also alles zusammenfügen, werden printf %100s
100 Leerzeichen gedruckt.
Jetzt tr
ist ein Werkzeug zum Übersetzen von Zeichen von Eingabe zu Ausgabe. Es werden zwei Argumente verwendet, SET1 und SET2, jeweils ein Satz von Zeichen, und dann wird das erste Zeichen von SET1 in das erste von SET2, das zweite Zeichen von SET1 in das zweite von SET2 usw. übersetzt. tr
Liest seine Eingabe von stdin und schreibt sie zurück in stdout (daher ist sie in Pipelines wie der obigen sehr nützlich.) tr
übersetzt immer alle Vorkommen dieses Zeichens in eine bestimmte Zeichenfolge.
Zum Beispiel tr aeiou 12345
werden Kleinbuchstaben in dieser Reihenfolge in die Zahlen 1 bis 5 übersetzt, sodass beispielsweise "Warteschlangen" in "q52523ng" übersetzt werden. Sie können ihm auch Zeichenbereiche übergeben, z. B. tr a-z A-Z
um einen Kleinbuchstaben in den entsprechenden Großbuchstaben umzuwandeln.
tr " " "="
Übersetzen Sie also einfach Leerzeichen in Gleichheitszeichen in der gesamten Zeichenfolge. Das erste Leerzeichen muss in Anführungszeichen gesetzt werden, um als Argument erkannt zu werden. Die =
nicht wirklich brauchen , um zitiert werden, aber dadurch nicht so nicht schaden. tr " " =
hätte genauso funktioniert.
Wenn Sie alles zusammenfügen, drucken Sie 100 Leerzeichen und übersetzen Sie jedes in Gleichheitszeichen.
Hoffentlich erklärt dies dies ausführlich genug, aber wenn Sie noch etwas nicht verstehen, hinterlassen Sie bitte einen Kommentar, und ich werde versuchen, dies zu beheben.
printf '%100s' ' ' | tr " " "="