Supondo que a variável contenha apenas caracteres de byte único e largura única:
printf -v str2 %8s "$str1"
Se eles puderem conter caracteres de vários bytes (mas ainda de largura única), você poderá fazer isso:
printf -v str2 %8s%s '' "$str1"
str2=${str2: -8}
(note, no entanto, que esse trunca valores maiores que 8 caracteres).
Aqui o comando bash
' printf
builtin suporta -v
para armazenar o resultado de printf
em uma variável, mas mesmo que você não use a substituição de comando:
str2=$(printf %8s "$str1")