Когда я набираю, echo $PATHон возвращает мое $PATH, но я хочу повторить слово, $PATHа не то, что означает реальная переменная, echo "$PATH"тоже не работает.
@ StéphaneChazelas Этот вопрос почти на два года новее, чем этот.
DisplayName
@DisplayName, да, но задумано как «канонический» вопрос, чтобы охватить все те «как мне отобразить специальный символ X». (Я не уверен, что мне нравится идея, что эти «канонические» ответы на все вопросы используются для закрытия конкретных вопросов, поэтому я просто добавил его в качестве комментария вместо закрытого голосования).
Стефан Шазелас
Ответы:
77
Вам просто нужно сбежать от доллара $.
echo \$PATH
$PATH
Или заключите его в одинарные кавычки:
echo '$PATH'
$PATH
Это гарантирует, что слово не интерпретируется оболочкой.
Спасибо, echo -eна странице руководства ничего не сказано .
DisplayName
-eФлаг используется для расширения, например, \tв буквальном табуляции. Это не связано с выходом из знака доллара для предотвращения расширения параметров.
chepner
2
Это не работает при обращении к файлу. echo '\$PATH' >> output.txtв результате в файл записывается "/ usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin: / usr / games: / usr / local / games: / opt / vc / bin" , а не "$ PATH".
Cerin
2
Очень интересно, если вы используете одинарные кавычки и экранированный символ, то это должно просто повторить \ $ PATH. Из какой ОС / пакета получена ваша эхо-команда?
geedoubleya
@Cerin для вас @ Stéphane ответ работал echo '\044*' > first.txtон будет выводить $ * в first.txt
Maq
20
$в синтаксисе большинства оболочек это очень специальный символ. Если мы только посмотрим на борновоподобные снаряды, то используем:
параметр разложения , как и в $#, $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
$ 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для произвольных данных.
пожалуйста, добавьте комментарий при голосовании с понижением
andreas-h
2
Илиec""h'''o''' ''""''\$P''A""TH''
Стефан Шазелас
Я не уверен, что пытается этот ответ. Ответ заключается в использовании \ $ или одинарных кавычек. echo '$ PATH' выведет на экран $ PATH echo '\ $ PATH' выведет \ $ PATH echo "\ $ PATH" выведет $ PATH echo '' \ $ PATH '' технически сделает правильную вещь, но две пустые строки не служат цели.
echo '$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 "$"PATH
. Этого следует избегать, потому что некоторые оболочки любятecho $""PATH
,echo $"PATH"
ksh93
иbash
поддерживают$"..."
форму цитат.echo $``PATH
, Нет причин, почему вы хотели бы использовать это, кроме как показать, что это возможноecho "${$+$}PATH"
и другие запутанные ...Или вы можете вывести это
$
другим способом:echo
:echo '\044PATH'
(некоторые другиеecho
потребностиecho -e '\044PATH'
)printf '\44PATH\n'
Обратите внимание на то, что эти обратные слеши должны быть заключены в кавычки, поскольку они также являются особенными для оболочки.
Надеюсь, к настоящему времени уже ясно, что хотя есть много способов сделать это, нет веской причины, по которой вы захотите использовать что-то еще, кроме как
echo '$PATH'
здесь.источник
Обратите внимание, что литерал $ внутри двойных кавычек может быть проблемой. Это можно сделать, создав $ вне двойных кавычек, например:
ВЫХОД:
источник
echo "$term is the value of \$term"
как уже объяснялось в другом ответе. Илиprintf '%s is the value of $term\n' "$term"
как ни в коем случае не следует использоватьecho
для произвольных данных.Использование:
Это будет работать
источник
ec""h'''o''' ''""''\$P''A""TH''