The answers that say to put $VAR
in quotes are only correct by side effect. That is, when put in quotes, echo(1)
receives a single argument of -e xyz
, and since that is not a valid option string, echo
just prints it out. It is a side effect as echo
could just as easily print an error regarding malformed options. Most programs will do this, but it seems GNU echo
(from coreutils
) and the version built into bash
simply echo strings that start with a hyphen but are not valid argument strings. This behaviour is not documented so it should not be relied upon.
Further, if $VAR
contains a valid echo
option argument, then quoting $VAR will not help:
$ VAR="-e"
$ echo "$VAR"
$
Most GNU programs take --
as an argument to mean no more option processing — all the arguments after --
are to be processed as non-option arguments. bash echo
does not support this so you cannot use it. Even if it did, it would not be portable. echo
has other portability issues (-n
vs c
, no -e
).
The correct and portable solution is to use printf(1)
.
printf "%s
" "$VAR"
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…