Например, $PATHи$HOME
Когда я набираю, echo $PATHон возвращает мое $PATH, но я хочу повторить слово, $PATHа не то, что означает реальная переменная, echo "$PATH"тоже не работает.
Например, $PATHи$HOME
Когда я набираю, echo $PATHон возвращает мое $PATH, но я хочу повторить слово, $PATHа не то, что означает реальная переменная, echo "$PATH"тоже не работает.
Ответы:
Вам просто нужно сбежать от доллара $.
echo \$PATH
$PATH
Или заключите его в одинарные кавычки:
echo '$PATH'
$PATH
Это гарантирует, что слово не интерпретируется оболочкой.
echo -eна странице руководства ничего не сказано .
-eФлаг используется для расширения, например, \tв буквальном табуляции. Это не связано с выходом из знака доллара для предотвращения расширения параметров.
echo '\$PATH' >> output.txtв результате в файл записывается "/ usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin: / usr / games: / usr / local / games: / opt / vc / bin" , а не "$ PATH".
echo '\044*' > first.txtон будет выводить $ * в first.txt
$в синтаксисе большинства оболочек это очень специальный символ. Если мы только посмотрим на борновоподобные снаряды, то используем:
$#, $var,${foo:-bar}$(logname)(также ${ logname;}в некоторых оболочках, чтобы избежать подоболочки)$((1+1))(также $[1+1]в некоторых оболочках).$'\n'или $"localized string".За исключением последнего случая, эти расширения / замены все еще происходят в двойных кавычках (и внутри $"..."в bashили ksh93)
Чтобы это $не обрабатывалось особым образом, вы должны указать это:
echo '$PATH'или echo '$'PATH. Тот, который вы обычно хотели бы использовать, поскольку он экранирует все символы (кроме себя) в большинстве оболочек.echo \$PATH. Также внутри двойных кавычек:echo "\$PATH"echo $'$PATH', echo $'\44PATH'(при условии , совместимый набор символов ASCII),echo $'\u0024'Или убедитесь, что это не является частью действительной формы расширения, как указано выше:
echo "$"PATHecho $""PATH,echo $"PATH"ksh93и bashподдерживают $"..."форму цитат.echo $``PATH, Нет причин, почему вы хотели бы использовать это, кроме как показать, что это возможноecho "${$+$}PATH" и другие запутанные ...Или вы можете вывести это $другим способом:
echo: echo '\044PATH'(некоторые другие echoпотребности echo -e '\044PATH')printf '\44PATH\n'кот << \ EOF $ PATH EOF
Обратите внимание на то, что эти обратные слеши должны быть заключены в кавычки, поскольку они также являются особенными для оболочки.
Надеюсь, к настоящему времени уже ясно, что хотя есть много способов сделать это, нет веской причины, по которой вы захотите использовать что-то еще, кроме как echo '$PATH'здесь.
Обратите внимание, что литерал $ внутри двойных кавычек может быть проблемой. Это можно сделать, создав $ вне двойных кавычек, например:
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
echo "$term is the value of \$term"как уже объяснялось в другом ответе. Или printf '%s is the value of $term\n' "$term"как ни в коем случае не следует использовать echoдля произвольных данных.
Использование:
echo ''\$PATH'' >> output.txt
Это будет работать
ec""h'''o''' ''""''\$P''A""TH''
echo '$PATH'. для получения дополнительной информации о цитировании, посетите это и это