Я хотел отобразить длинный список строк от массива.
Прямо сейчас, мой сценарий, пробежавший для цикла, повторяющего каждое значение к стандартному выводу:
for value in ${values[@]}
do
echo $value
done
Да, это довольно ужасно! И список одного столбца довольно длинен также...
Я задавался вопросом, могу ли я найти команду или встроенную помощь мне отобразить все те значения в столбцах, как ls
команда делает по умолчанию при списке каталога (ls -C
).
[Обновление]
Потеря моего мозга с column
не отображая правильно отформатированные столбцы, вот больше информации:
Значения: $ values=( 01----7 02----7 03-----8 04----7 05-----8 06-----8 07-----8 08-----8 09---6 10----7 11----7 12----7 13----7 14-----8 15-----8 16----7 17----7 18---6 19-----8 20-----8 21-----8)
(Заметьте первые две цифры как индекс и последний, указывающий на длину строки для удобочитаемости),
Команда: echo " ${values[@]/%/$'\n'}" | column
Результат: неверные столбцы http://tychostudios.ch/multipurpose/bad_columns.png
Что-то идет не так, как надо...
Вы можете направить ваш вывод в column
.
column
, похоже, борется с тем, что некоторые данные в одноколоночном вводе могут быть меньше, чем стоп табуляции (8 символов).
Использование printf
внутри for
-петли для заполнения значений до 8 символов, похоже, помогает:
for value in "${values[@]}"; do
printf "%-8s\n" "${value}"
done | column
Вот пара техник, которые можно использовать с ответом Johnsyweb'а, чтобы вы могли делать вывод без цикла:
saveIFS=$IFS
IFS=$'\n'
echo "${values[*]}" | column
IFS=$saveIFS
или
echo " ${arr[@]/%/$'\n'}" | column
или
echo " ${arr[@]/%/$'\n'}" | sed 's/^ //' | column
Это может показаться излишним, но я придумал собственное решение. Я написал небольшой скрипт, который делает именно то, что я хотел: берет список значений и выводит их в виде красиво отформатированной колонки.
Используйте табуляцию после каждого значения.
(Он также автоматически переходит к следующей строке ...)
for value in ${values[@]}
do
echo -en "$value\t"
done
Подробная информация здесь
GoodLUCK !!
- CVS