2

I am writing a bash script, and I want to echo a string, but without a newline automatically added to the end. Reading the man page it says the flag is -n.

The problem is, when I do:

echo -n "My string is here"

The output in the bash script is:

-n My string is here

Any idea why the -n flag is being outputted instead of processed.

Justin
  • 5,008
  • 19
  • 58
  • 82

3 Answers3

6

Check the shell you are using with:

echo $0

If it is /bin/sh, change to /bin/bash with chsh and try again.

http://hints.macworld.com/article.php?story=20071106192548833

quanta
  • 50,327
  • 19
  • 152
  • 213
  • This'll change your interactive shell, but the shell used for scripts is determined by the shebang line at the beginning of the script (e.g. `#!/bin/sh`). – Gordon Davisson Sep 20 '11 at 18:08
1

Works on CentOS, but appears that OSX does not like the -n flag.

Justin
  • 5,008
  • 19
  • 58
  • 82
  • That's weird. I have several scripts on OS X Lion and Snow Leopard that use `echo -n` successfully. – slillibri Sep 20 '11 at 09:19
  • 1
    It depends on which shell is running the script, usually dictated by the #! on the first line. If you explicitly ask for bash (`#!/bin/bash`) or some other shell that definitely supports the option then `echo -n`. On some systems the shell that `/bin/sh` represents *is* Bash or similar, but it could be something very simple that only implements the minimum functionality required to be POSIX compliant (and this doesn't include the `-n` option for `echo`). – David Spillett Sep 20 '11 at 11:10
  • It also depends on the version of OS X (and hence bash) -- 10.4 understands `-n` just fine, but 10.5.0 doesn't. – Gordon Davisson Sep 20 '11 at 18:10
1

echo is weirdly inconsistent between versions -- different versions of /bin/echo, as well as the builtin versions in various shells (even different versions of the same shell). Some versions understand options (like -n), some versions understand escape sequences within the string (end with "\c" to skip the newline). Some versions use a weird mix of the two.

If you want consistent behavior, avoid echo and use printf instead. It's a little more complicated, but it's much more predictable:

printf "%s" "My string is here"
Gordon Davisson
  • 11,036
  • 3
  • 27
  • 33