Hacker News new | ask | show | jobs
by someplaceguy 1033 days ago
Can you expand on why?
3 comments

Because `echo -n` is a BSD-ism that's not supported on System V derivatives¹. It's perfectly legitimate for:

    echo -n "please hash this data"
...to output the bytes "-n please hash this data\n", which is even more misleading than the extra newline echo outputs normally.

¹: https://pubs.opengroup.org/onlinepubs/9699919799/utilities/e...

     The newline may also be suppressed by appending `\c' to the end of the
     string, as is done by iBCS2 compatible systems.  Note that the -n option
     as well as the effect of `\c' are implementation-defined in IEEE Std
     1003.1-2001 ("POSIX.1") as amended by Cor. 1-2002.  For portability, echo
     should only be used if the first argument does not start with a hyphen
     (`-') and does not contain any backslashes (`\'). If this is not suffi-
     cient, printf(1) should be used.
* https://man.freebsd.org/cgi/man.cgi?query=echo

     \c      Suppress the <newline> that otherwise follows
             the final argument in the output. All
             characters following the '\c' in the arguments
             shall be ignored.
* https://man7.org/linux/man-pages/man1/echo.1p.html
Thanks for mentioning that! I learned something.
Because if you get in the habit of using printf instead of echo you can avoid having to remember to strip the newline when it matters and only add it when you need it. Though obviously echo is simpler to use for 95% of situations.
With the formated parameters '%s' it's instantly visible that there is no new line.