I just want a String (including coloring) be formatted by printf command and assign the result to a variable.
Without assigning it to a variable it works fine, but as soon as I assign the result to a variable and write the result, the format is gone.
My example:
RED=$'33[0;31m'
NC=$'33[0m'
INPUT="AB${RED}CD${NC}EF"
printf -v OUTPUT '| %-20s | %-25s| %-10s' " $INPUT " " OTHER " " TEST "
echo $OUTPUT
OUTPUT="$(printf '| %-20s | %-25s| %-10s' " $INPUT " " OTHER " " TEST ")"
echo $OUTPUT
OUTPUT=$(printf '| %-20s | %-25s| %-10s' " $INPUT " " OTHER " " TEST ")
echo $OUTPUT
printf '| %-20s | %-25s| %-10s' " $INPUT " " OTHER " " TEST "
echo ""
I found several solutions for passing the result to a variable (-v VARIABLE), but it looses the format.
Thanks for your help and many greetings,
Hauke
EDIT 1: Also one problem seems to be the colorcode. printf counts AB${RED}CD${NC}EF as 17 characters instead of 6.
Advertisement
Answer
Use this (echo “$VAR” in “”) to keep the formatting. The different ways of assigning the variable make no difference:
printf -v OUTPUT '| %-20s | %-25s| %-10s' " $INPUT " " OTHER " " TEST " # or OUTPUT=$(printf '| %-20s | %-25s| %-10s' " $INPUT " " OTHER " " TEST ") echo "$OUTPUT"