Porque printf
conta os caracteres no código de escape que define a cor; não sabe que não imprimem realmente. Você precisaria colocá-los fora das cadeias formatadas com comprimento fixo ( %-20s
). Compare os dois printf
s aqui:
#!/bin/bash
green=$'3[32m'
yellow=$'3[33m'
normal=$'3[0m'
printf "1234567890123456789012345678901234567\n";
printf "%-20s %s\n" "${yellow}some string${normal}" "next col"
printf "${yellow}%-20s${normal} %s\n" "some string" "next col"
A saída deve ficar assim:
Claro,seacormudar,podemoscolocá-laemoutravariável:
printf"%s%-20s${normal} %s\n" "$green" "some string" "next col"