Samuel Bronson wrote: > Frank Terbeck wrote: >> Samuel Bronson wrote: [...] >>> | naesten@hydrogen:~/hacking/crawl/crawl-ref/source% echo -n ${(q)$(echo | >>> -e "\e")}|hd >>> | 00000000 24 27 1b 27 |$'.'| >>> | 00000004 [...] >> zsh% printf '%s\n' ${(q)$(echo -e "\e")} >> $'\033' > > Oh, really? Leaves one wondering about the point of "echo -e"...
Not really. The problem is not the inner, but the outer echo. The inner echo ($the >$(echo -e "\e")<)produces an actual escape character (0x1b). The (q) produces an octal escape in $'...' quotes (0x1b == 033o). The outer echo sees the octal escape and interprets it, producing a literal ASCII escape character again. Echo is like that - or not, depending on the shell in question. Even POSIX says: [SUSv3, echo] New applications are encouraged to use printf instead of echo. [...] The echo utility has not been made obsolescent because of its extremely widespread use in historical applications. Conforming applications that wish to do prompting without <newline>s or that could possibly be expecting to echo a -n, should use the printf utility derived from the Ninth Edition system. [/SUSv3] In other words: `echo' is crap. We've just not removed it, because it's in heavy use. If you want consistent predictable behaviour, use `printf'. If you're wondering why zsh's `echo' has the `-e' option at all, although it interprets the escape sequences anyway, then the answer is: Because zsh tries to please everyone. There is an `-E' option, that disables the escape sequences effect. And there's a `BSD_ECHO' option, that makes that behaviour the default for zsh's `echo'. In order to get the interpreting behaviour with that option set, the `-e' option is provided. This is yet another reason not to use echo. Different shells have annoyingly different echos and in zsh you can even alter its behaviour by options. I hope that clears things up. Regards, Frank -- To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org