Apenas para saída:
array=( bish bash bosh )
printf '%-20s#\n' "${array[@]}"
Isso produziria
bish #
bash #
bosh #
... onde #
ocorre na coluna 21.
Para criar uma nova matriz (e imprimi-la):
array=( bish bash bosh )
for elem in "${array[@]}"; do
padarr+=( "$( printf '%-20s#' "$elem" )" )
done
printf '%s\n' "${padarr[@]}"
Com /bin/sh
, apenas imprimindo:
set -- bish bash bosh
printf '%-20s#\n' "$@"
Com /bin/sh
, modificando $@
no local:
set -- bish bash bosh
i=0
while [ "$i" -lt "$#" ]; do
set -- "$@" "$( printf '%-20s#' "$1" )"
shift
i=$(( i + 1 ))
done
printf '%s\n' "$@"
A string de formatação printf
%-20s
reserva 20 caracteres para uma string justificada à esquerda.
Como uma função bash
(4.3+):
pad_array () {
local padlen=$1
local -n localarray=$2
local -a tmp
local elem
for elem in "${localarray[@]}"; do
tmp+=( "$( printf '%-*s#' "$padlen" "$elem" )" )
done
localarray=( "${tmp[@]}" )
}
myarray=( bish bash bosh )
pad_array 20 myarray
printf '%s\n' "${myarray[@]}"
A função pad_array
aqui também permite que você escolha a quantidade de preenchimento.
A matriz é passada por seu nome e é recebida pela função em uma variável de referência de nome. Isso significa que sempre que a referência de nome é acessada na função, a variável denominada é realmente usada.