Closely related to this question: Bash prefix printf
I have the following Bash script that generates an RRDGraph with RRDTool.
#!/bin/bash now=$(date +%s) now_formatted=$(date +%s | awk '{printf "%s\n", strftime("%c",$1)}' | sed -e 's/:/\\:/g') # create power graph for last week /usr/bin/rrdtool graph /var/www/power-week.png \ --start end-7d --width 543 --height 267 --end $now-1min --slope-mode \ --vertical-label "Watts" --lower-limit 0 \ --alt-autoscale-max \ --title "Power: Last week vs. week before" \ --watermark "(©) $(date +%Y) Alyn R. Tiedtke" \ --font WATERMARK:8 \ DEF:Power=/root/currentcost/ccdata.rrd:Power:AVERAGE \ DEF:Power2=/root/currentcost/ccdata.rrd:Power:AVERAGE:end=$now-7d1min:start=end-7d \ VDEF:Last=Power,LAST \ VDEF:First=Power,FIRST \ VDEF:Min=Power,MINIMUM \ VDEF:Peak=Power,MAXIMUM \ VDEF:Average=Power,AVERAGE \ CDEF:kWh=Power,1000,/,168,* \ CDEF:Cost=kWh,.1029,* \ SHIFT:Power2:604800 \ LINE1:Power2#00CF00FF:"Last Week\\n" \ HRULE:Min#58FAF4:"Min " \ GPRINT:Power:MIN:"%6.2lf%sW" \ COMMENT:"\\n" \ LINE1:Power#005199FF:"Power " \ AREA:Power#00519933:"" \ GPRINT:Last:"%6.2lf%sW" \ COMMENT:"\\n" \ HRULE:Average#9595FF:"Average" \ GPRINT:Power:AVERAGE:"%6.2lf%sW" \ COMMENT:"\\n" \ HRULE:Peak#ff0000:"Peak " \ GPRINT:Power:MAX:"%6.2lf%sW" \ COMMENT:"\\n" \ GPRINT:kWh:AVERAGE:" total %6.2lfkWh\\n" \ GPRINT:Cost:AVERAGE:" cost %6.2lf £\\n" \ GPRINT:Cost:AVERAGE:"$(printf \\" cost %11s\\" £%.2lf | sed 's/\£/\£ /g')\\n" \ COMMENT:" \\n" \ GPRINT:First:"Showing from %c\\n":strftime \ GPRINT:Last:" to %c\\n":strftime \ COMMENT:" Created at $now_formatted"
Which creates such a graph (pay attention to the leading \ on the bottom line of costs in the legend): -

Concentration, especially on the next line: -
GPRINT:Cost:AVERAGE:"$(printf \\" cost %11s\\" £%.2lf | sed 's/\£/\£ /g')\\n" \
This is a line that prints a line with a lower value in the legend.
I am passing a formatted GPRINT value from £4.54 to Bash printf , which should be padded with 11 spaces and a cost sticker with a prefix on it. Then I connect this to sed to add a space between £ and the actual value.
What I want to know is why the escaped \ comes out in the output file? If I delete \\ right after printf Bash complains that something is missing.
How could I suppress this \ output.
source share