I'm trying to print
-n using the
echo command. But if i simply type
echo -n, it only issues a newline, not show up
-n, instead it issues a newline.
The problem is that
echo interprets the
-n as an argument. On the default bash implementation, that means (from
-n do not append a newline
There are various ways of getting around that:
Make it into something that isn't an option by including another character. For example, tell
echonot to print a newline with
-n, then tell it to interpret backslash escapes with
-eand add the newline explicitly.
$ echo -ne '-n\n' -n
Alternatively, just include a space
$ echo " -n" -n
That, however, adds a space which you probably don't want.
Use a non-printing character before it. Here. I am using the backspace (
$ echo -e "\b-n" -n
This also adds an extra character you probably don't want.
$ echo n- | rev -n
revcommand simply prints its output reversed.
$ printf -- '-n\n' -n
You can use this command, but it adds an extra space.
echo -e "\r-n"
This is a kind of a hack.
-e enables backslash command symbols.
\r is a carriage return.
\ valid character will do in any place of the string.
You can see which are valid by
echo "-n" does not work because
-n is used as a parameter for
P.S. The best solution IMHO is
echo -e "-n\c"
It does not add any extra characters.
echo -e "-n\n"
prints the same but with a new line char.
To extend @A.B's answer, the only portable way to use
echo is to refrain from using any options like
-n. Consider use
printf instead where available. This reference page provides more details and explains very well when and how
printf should be used:
Nowadays, echo(1) is only portable if you omit flags and escape sequences. Use printf(1) instead, if you need more than plain text.