Создать строку с конечными пробелами в Bash - PullRequest
1 голос
/ 12 января 2012

Я бы хотел перебрать ассоциативный массив и распечатать пары ключ / значение. Поэтому я бы хотел сделать отступ для значений таким образом, чтобы они начинались с одной и той же позиции за соответствующими ключами.

Вот пример:

declare -A my_array
my_array["k 1"]="value one"
my_array["key two"]="value two"
for key in "${!my_array[@]}"; do
  echo "$key: ${my_array[$key]}"
done

Выход

k 1: value one
key two: value two

Вывод, который я хотел бы получить (для произвольной длины ключа):

k 1:     value one
key two: value two

Ответы [ 2 ]

4 голосов
/ 12 января 2012

Вы можете использовать <a href="http://linux.die.net/man/1/printf" rel="nofollow">printf</a>, если ваша система имеет это:

printf "%20s: %s" "$key" "${my_array[$key]}"

Это жестко кодирует максимальную длину ключа до 20, но вы, конечно, можете добавить код, который перебирает ключи, вычисляетмаксимум, а затем использует его для построения строки форматирования printf.

1 голос
/ 12 января 2012

Используйте printf вместо echo.Вы получите всю мощь форматирования, например, %30s для поля из 30 символов.

...