Например, $PATH
и$HOME
Когда я печатаю, echo $PATH
он возвращает мой $PATH
, но я хочу вывести слово $PATH
, а не то, что на самом деле обозначает переменная, echo "$PATH"
это тоже не работает.
решение1
Вам просто нужно сбежать от доллара $
.:
echo \$PATH
$PATH
Или заключите его в одинарные кавычки:
echo '$PATH'
$PATH
Это гарантирует, что слово не будет интерпретировано оболочкой.
решение2
$
в синтаксисе большинства оболочек есть очень специальный символ. Если мы рассмотрим только оболочки типа Bourne, он используется для введения:
- расширения параметров, как в
$#
,$var
,${foo:-bar}
- подстановка команд, как в
$(logname)
(также${ logname;}
в некоторых оболочках, чтобы избежать подоболочки) - арифметическое расширение, как в
$((1+1))
(также$[1+1]
в некоторых оболочках). - другие формы кавычек в некоторых оболочках, например
$'\n'
или$"localized string"
.
За исключением последнего случая, эти расширения/замены все еще происходят внутри двойных кавычек (и внутри $"..."
или bash
) ksh93
.
Чтобы это не $
рассматривалось как нечто особенное, вам нужно процитировать его одним из следующих способов:
- одинарные кавычки:
echo '$PATH'
илиecho '$'PATH
. Тот, который вы обычно хотите использовать, так как он экранирует все символы (кроме самого себя) в большинстве оболочек. - blackslash:
echo \$PATH
. Также внутри двойных кавычек:echo "\$PATH"
- в некоторых оболочках — другой оператор кавычек:
echo $'$PATH'
,echo $'\44PATH'
(предполагая, что набор символов совместим с ASCII),echo $'\u0024'
Или убедитесь, что это не часть допустимой формы расширения, перечисленной выше:
echo "$"PATH
. Их следует избегать, поскольку некоторые оболочки любятecho $""PATH
,echo $"PATH"
ksh93
иbash
поддерживают$"..."
форму кавычек.echo $``PATH
. Нет причин использовать это, кроме как показать, что это возможно.echo "${$+$}PATH"
и другие запутанные...
Или вы можете вывести это $
по-другому:
- с Unix-совместимым
echo
:echo '\044PATH'
(некоторые другиеecho
нуждаются вecho -e '\044PATH'
) printf '\44PATH\n'
кот << \EOF $ПУТЬ ЭОФ
Обратите внимание, что эти обратные косые черты необходимо заключать в кавычки, поскольку они, очевидно, также являются специальными для оболочки.
Надеюсь, теперь вам должно быть ясно, что, хотя существует множество способов сделать это, нет никаких веских причин использовать что-то еще, кроме echo '$PATH'
этого.
решение3
Обратите внимание, что литерал $ внутри двойных кавычек может быть проблемой. Это можно сделать, поместив $ за пределы двойных кавычек, например:
echo "My terminal is $term, first file found in /dev is </dev/`ls /dev | head -n 1`>, the
dollar symbol is '"`echo '$'`"', and a newspaper costs "`echo '$'`"2.50."
or like this:
echo "$term is the value of "'$term'
ВЫХОД:
My terminal is xterm, first file found in /dev is </dev/acpi>, the dollar symbol
is '$', and a newspaper costs $2.50.
xterm is the value of $term
решение4
Использовать:
echo ''\$PATH'' >> output.txt
Это сработает.