Outra maneira é usar apenas o printf
comando e gerar primeiro o padrão de preenchimento de caracteres Shell Brace Expansion
(Você pode finalizar com um número ≥ da área de formatação em que deseja imprimir {1..end}
) e obter apenas cada primeiro caractere %.1s
que seja =
s e depois imprimir apenas os primeiros 20 caracteres área disso %.20s
. Essa é a maneira melhor de repetir caracteres / palavra em vez de duplicá-los.
printf '%.20s:\n' "$str$(printf '%.1s' ={1..20})"
Hello World!!=======:
Explicações:
Normalmente, como expansão de chaves , expansão de shell da {1..20}
seguinte forma, se as imprimirmos.
printf '%s ' {1..20}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Portanto, com a adição de um sinal de igual ={1..20}
, o shell se expandirá da seguinte forma.
printf '%s ' ={1..20}
=1 =2 =3 =4 =5 =6 =7 =8 =9 =10 =11 =12 =13 =14 =15 =16 =17 =18 =19 =20
E com o printf '%.1s'
que realmente significa printf '%WIDE.LENGTH'
, estamos imprimindo apenas um COMPRIMENTO daqueles acima com o padrão 1
WIDE . assim resultará =
apenas se 20 vezes se repetiu.
Agora, com printf '%.20s:\n'
estamos imprimindo apenas o comprimento de 20 $str
e se o comprimento for $str
<20, o restante levará de =
s gerados para preencher em vez de espaços.