A principal razão é porque o comando echo leva x número de caracteres da variável e preenche 14 espaços. Isso significa que o número total de caracteres no espaço da string de saída não será consistente.
Em vez disso, convém usar printf
com o especificador de largura %-10s
para o preenchimento à esquerda, desta forma:
bash-4.3$ for i in "${a[@]}"; do printf "%-10s%-4s|\n" "${i:0:10}" " "; done
1.wav |
2.wav |
3.wav |
input.txt |
Desta forma, qualquer variável que você tiver será feita para caber dentro de 10 caracteres, e para esses 10 caracteres, nós preencheremos 4. -
sign deixa cada string justificada.
O número -10
in %-10s
deve permanecer o mesmo para garantir que, mesmo que o arquivo tenha menos de 10 caracteres, ainda recebamos uma cadeia de 10 caracteres com espaços preenchidos. Mas %-4s
part pode ser variado. Por exemplo, no exemplo acima, %-4s
terá 4 espaços lá, mas se quisermos ter 14 espaços, use %-14s
.
Observe que geralmente é recomendado contra a análise de saída de ls , que é exatamente o que você está fazendo. Como alternativa, podemos usar o comando find
com while IFS= read -r -d ''
estrutura assim:
bash-4.3$ find -maxdepth 1 -type f -print0 | while IFS= read -r -d '' file;
> do
> printf "%-10s%-4s|\n" "${file:0:10}" " "
> done
./3.wav |
./1.wav |
./2.wav |
./.swp |
./input.tx |
Observe que find
é recursivo, por isso também funciona em subdiretórios. Se você quiser evitar isso, use a opção -maxdepth 1
.