You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Lawrence Velázquez edited this page Jan 18, 2025
·
9 revisions
Don't use variables in the printf format string. Use printf "..%s.." "$foo".
Problematic code:
printf"Hello, $NAME\n"
Correct code:
printf"Hello, %s\n""$NAME"
Rationale:
printf interprets escape sequences and format specifiers in the format string. If variables are included, any escape sequences or format specifiers in the data will be interpreted too, when you most likely wanted to treat it as data. Example:
coverage='96%'printf"Unit test coverage: %s\n""$coverage"printf"Unit test coverage: $coverage\n"
The first printf writes Unit test coverage: 96%.
The second writes bash: printf: `\': invalid format character
Sometimes you may actually want to interpret data as a format string, like in:
octToAscii() { printf"\\$1"; }
octToAscii 130
In this case, use the %b format specifier that expands escape sequences without interpreting other format specifiers: