News for hackers. Stuff that matters.
Re:Base64 Encoding, Explained by meindnoch on Monday October 23, 2023 @06:19AM (#37983691)
Simply don't use echo if you want predictable output. Use printf. https://linux.die.net/man/1/printf
Re:Base64 Encoding, Explained by ndsipa_pomu on Monday October 23, 2023 @08:41AM (#37984832)
This is the way

(however, the parent's use of "echo" would be fine as it's not using a variable and so won't be interpreting a dash as an extra option etc)

Re:Base64 Encoding, Explained by gdavisson on Monday October 23, 2023 @03:40PM (#37990536)
echo -n is not safe, because some versions of echo will just print "-n" as part of their output (and add a newline at the end, as usual). In fact, XSI-compliant implementations are required to do this (and the same for anything else you try to pass as an option to echo). According to the POSIX standard[1], "If the first operand is -n, or if any of the operands contain a <backslash> character, the results are implementation-defined."

[1] https://pubs.opengroup.org/onlinepubs/9699919799/utilities/e...

Re:Base64 Encoding, Explained by ndsipa_pomu on Tuesday October 24, 2023 @04:46AM (#37996381)
Thanks - I wasn't aware that echo was that problematic as I target bash (usually v4 and above) from my scripts.

I just tested it out with:

  sh /bin/echo -n "test"
  /bin/echo: 3: Syntax error: "(" unexpected
I didn't realise until recently that printf can also replace a lot of uses of the "date" command which is helpful with logging as it avoids calling an external command for every line logged.
Re:Base64 Encoding, Explained by hddqsb on Sunday November 05, 2023 @11:59AM (#38152946)
> printf can also replace a lot of uses of the "date" command

Very cool (but bash-specific). Manual: https://www.gnu.org/software/bash/manual/bash.html#index-pri...

> sh /bin/echo -n "test"

This is gibberish -- it's trying to execute /bin/echo as if it was a shell script. Maybe you meant:

  sh -c '/bin/echo -n "test"'
Re:Base64 Encoding, Explained by quesera on Monday October 23, 2023 @04:00PM (#37990762)
Not all echos accept -n to suppress newlines.

printf is always the better choice.