In breve, printf %100s
stamperà 100 spazi e tr " " "="
li convertirà in segni uguali, stampando efficacemente 100 spazi uguali.
Abbattendo:
printf
è una shell integrata. In genere sono necessari due o più argomenti, il primo dei quali è una "stringa di formato" e il resto verrà utilizzato per riempire i segnaposto in quella stringa di formato. Una volta riempito completamente, il modello stamperà il risultato. Se sono rimasti più argomenti, ricomincerà, riempiendo più argomenti e stampando la stringa risultante.
La stringa di formato utilizzata printf
prende le specifiche di formato, che iniziano con %
e terminano con una singola lettera, quindi %d
significa un numero intero (usando la base decimale, quindi "d"), %f
indica un numero in virgola mobile e %s
una stringa di caratteri. I caratteri diversi dalle lettere dopo il %
sono modificatori per la specifica del formato e, in particolare, i numeri vengono utilizzati per specificare la lunghezza richiesta del campo in uscita. Quindi %100s
formatterà la stringa in modo che abbia almeno 100 caratteri, la riempirà di spazi e la manterrà allineata a destra (in altre parole, aggiungi spazi all'inizio della stringa).
Se viene passato un argomento in più, lo userebbe per quel %s
campo, quindi ad esempio printf %100s abc
stamperà 97 spazi (per arrivare a 100 totali, considerando il 3 in "abc") seguito dalla stringa effettiva "abc". Ma se non viene fornito alcun argomento, la specifica del formato viene riempita con un argomento vuoto o nullo (che è una stringa vuota per %s
, sarebbe 0 per %d
, ecc.) Quindi è lo stesso che se fosse passata una stringa vuota, come printf %100s ''
. Il risultato finale è che viene stampata solo l'imbottitura di 100 caratteri.
Quindi, mettendo tutto insieme, si printf %100s
ottengono 100 spazi stampati.
Ora tr
è uno strumento per tradurre i caratteri da input a output. Prende due argomenti, SET1 e SET2, ciascuno un insieme di caratteri, quindi traduce il primo carattere di SET1 nel primo di SET2, il secondo carattere di SET1 nel secondo di SET2 e così via. tr
legge il suo input da stdin e lo riscrive su stdout (quindi è molto utile in pipeline come quella sopra.) tr
tradurrà sempre tutte le occorrenze di quel carattere in una data stringa.
Ad esempio, tr aeiou 12345
tradurrà le vocali minuscole nei numeri da 1 a 5 in quell'ordine, quindi tradurrà "accodamento" in "q52523ng" per esempio. Puoi anche passare intervalli di caratteri, ad esempio tr a-z A-Z
per trasformare qualsiasi lettera minuscola nella lettera maiuscola corrispondente.
Quindi tr " " "="
sta semplicemente traducendo spazi in segni uguali in tutta la stringa. Il primo spazio deve essere citato per essere riconosciuto come argomento. In =
realtà non è necessario che sia citato, ma farlo non fa male. tr " " =
avrebbe funzionato allo stesso modo.
Mettendo tutto insieme, stampare 100 spazi, quindi tradurli ciascuno in segni uguali.
Spero che questo lo spieghi in modo sufficientemente dettagliato, ma se c'è ancora qualcosa che non capisci, per favore lascia un commento e proverò ad affrontarlo.
printf '%100s' ' ' | tr " " "="