Outra maneira é usar apenas o printfcomando 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 %.1sque 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 $stre se o comprimento for $str<20, o restante levará de =s gerados para preencher em vez de espaços.