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.

2
  • Which distro are you using? Commented Sep 20, 2011 at 9:05
  • :) LOL, on CentOS it works, but on OSx it does not. We are fine though, since its going to run on CentOS. Commented Sep 20, 2011 at 9:09

3 Answers 3

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

1
  • 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). Commented Sep 20, 2011 at 18:08
1

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

3
  • That's weird. I have several scripts on OS X Lion and Snow Leopard that use echo -n successfully. Commented Sep 20, 2011 at 9: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). Commented Sep 20, 2011 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. Commented Sep 20, 2011 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" 

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.