Хочу создать рамку вокруг вывода, для этого использую функцию
msg="# $* #"
что-то вообще не то
как вариант размер можно контролировать через column
MEM="Memory Usage: 277/1983MB (13.97%)"
HDD="Disk Usage: 5/16GB (35%)"
CPU="CPU Load: 0.00"
VAR="$MEM\n$HDD\n$CPU"
banner() {
	v="$@"
	x=$(echo -e "$v" |awk '{if(length>max)max=length}END{for(i=1;i<max+5;i++){printf "#"}}')
	echo "$x"
	echo -e "$v" |awk '{print "# "$0" #"}' |column -t -s: -o: |column -t -s'#' -o'#'
	echo "$x"
}
banner "$VAR"
вывод
#####################################
# Memory Usage: 277/1983MB (13.97%) #
# Disk Usage  : 5/16GB (35%)        #
# CPU Load    : 0.00                #
#####################################
хотя если есть возможность изначально контролировать  вид получение MEM, HDD, CPU то будет проще записать данные через тот же 
csv а его вывод уже форматировать соответствующими программами, например 
csview
MEM="Memory,277/1983MB,13.97%"
HDD="Disk,5/16GB,35%"
CPU="CPU,0.00,"
echo -e "$MEM\n$HDD\n$CPU" |csview -H --style Reinforced
вывод:
┏────────┬────────────┬────────┓
│ Memory │ 277/1983MB │ 13.97% │
│ Disk   │ 5/16GB     │ 35%    │
│ CPU    │ 0.00       │        │
┗────────┴────────────┴────────┛