Suppose I have an associative array of ( [name]="Some description" )
.
declare -A myItems=(
[item1]='Item1 description'
[item2]='Item2 description'
)
I now want to print a table of myItems
with nice, even column lengths.
str=''
for n in $(echo "${!myItems[@]}" | tr " " "\n" | sort); do
str+="$n\t${myItems[$n]}\n"
done
# $(printf '\t') was the simplest way I could find to capture a tab character
echo -e "$str" | column -t -s "$(printf '\t')"
### PRINTS ###
item1 Item1 description
item2 Item2 description
Cool. This works nicely.
Now suppose an item has a description that is multiple lines.
myItems=(
[item1]='Item1 description'
[item2]='Item2 description'
[item3]='This item has
multiple lines
in it'
)
Now running my script prints
item1 Item1 description
item2 Item2 description
item3 This item has
multiple lines
in it
What I want is
item1 Item1 description
item2 Item2 description
item3 This item has
multiple lines
in it
Is this achievable with column
? If not, can I achieve it through some other means?