On 8/19/11 6:38 AM, Roman Rakus wrote: > On 08/18/2011 07:57 PM, Eric Blake wrote: >> On 08/18/2011 08:53 AM, Roman Rakus wrote: >>> On 08/18/2011 04:38 PM, Sam Steingold wrote: >>>> how do I write a function that would print the same as >>>> $ \ls | cat >>> f3(){ printf "%s\n" "$@"; } >> >> "\n" looks funny in shell; even though POSIX requires that "\n" does not >> treat the \ as an escape but as a literal character, stylistically, I >> prefer writing "\\n" or '\n' to make it clear that I intended a literal >> backslash. >> > Interesting. I would expect that "\\n" in printf will print out `\n'. Good > to know.
printf performs its own backslash interpretation of the format string, so Eric's point is that any word expansions may reduce the number of backslashes printf sees. This depends on the character following the backslash, since double quotes enable backslash interpretation for only a few specific characters. "\n" will remain unchanged, since the `n' is not one of the characters for which backslash is special, but "\\n" will be expanded to "\n". "\\n" will be transformed to "\n" by the time printf sees it, and printf will translate that to newline. '\\n' will be displayed as you expect. Chet -- ``The lyf so short, the craft so long to lerne.'' - Chaucer ``Ars longa, vita brevis'' - Hippocrates Chet Ramey, ITS, CWRU c...@case.edu http://cnswww.cns.cwru.edu/~chet/