How to print "-n" without issuing a newline?
The problem is that echo
interprets the -n
as an argument. On the default bash implementation, that means (from help echo
):
-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
echo
not to print a newline with-n
, then tell it to interpret backslash escapes with-e
and 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 (
\b
)$ echo -e "\b-n" -n
This also adds an extra character you probably don't want.
-
Use trickery
$ echo n- | rev -n
The
rev
command simply prints its output reversed. -
Use the right tool for the job
$ printf -- '-n\n' -n
Sometimes it's a good idea to use the right tool. You could use printf
instead:
% 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.
Actually any \
valid character will do in any place of the string.
You can see which are valid by help echo
.
echo "-n"
does not work because -n
is used as a parameter for echo
.
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.