Ответы, которые говорят, чтобы поставить $VAR
в кавычки, являются правильными только по побочному эффекту. То есть, когда в кавычках, echo(1)
получает единственный аргумент -e xyz
, и, поскольку это недопустимая строка параметра, echo
просто выводит его. Это побочный эффект, так как echo
может так же легко напечатать ошибку, касающуюся некорректных опций. Большинство программ делают это, но, похоже, GNU echo
(из coreutils
) и версия, встроенная в bash
, просто выводят строки, которые начинаются с дефиса, но не являются допустимыми строками аргументов. Такое поведение не задокументировано, поэтому на него не следует полагаться.
Кроме того, если $VAR
содержит действительный аргумент опции echo
, то цитирование $ VAR не поможет:
$ VAR="-e"
$ echo "$VAR"
$
Большинство программ GNU принимают --
в качестве аргумента, что означает отсутствие необходимости обработки опций - все аргументы после --
должны обрабатываться как аргументы, не являющиеся опциями. bash echo
не поддерживает это, поэтому вы не можете его использовать. Даже если бы это было так, оно не было бы портативным. echo
имеет другие проблемы с переносимостью (-n
против \c
, нет -e
).
Правильным и переносимым решением является использование printf(1)
.
printf "%s\n" "$VAR"