In breve, printf %100sstamperà 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 printfprende le specifiche di formato, che iniziano con %e terminano con una singola lettera, quindi %dsignifica un numero intero (usando la base decimale, quindi "d"), %findica un numero in virgola mobile e %suna 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 %100sformatterà 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 %scampo, quindi ad esempio printf %100s abcstamperà 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 %100sottengono 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. trlegge il suo input da stdin e lo riscrive su stdout (quindi è molto utile in pipeline come quella sopra.) trtradurrà sempre tutte le occorrenze di quel carattere in una data stringa.
Ad esempio, tr aeiou 12345tradurrà 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-Zper 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 " " "="