Как можно повторить знаки доллара?

Как можно повторить знаки доллара?

Например, $PATHи$HOME

Когда я печатаю, echo $PATHон возвращает мой $PATH, но я хочу вывести слово $PATH, а не то, что на самом деле обозначает переменная, echo "$PATH"это тоже не работает.

решение1

Вам просто нужно сбежать от доллара $.:

echo \$PATH
$PATH

Или заключите его в одинарные кавычки:

echo '$PATH'
$PATH

Это гарантирует, что слово не будет интерпретировано оболочкой.

решение2

$в синтаксисе большинства оболочек есть очень специальный символ. Если мы рассмотрим только оболочки типа Bourne, он используется для введения:

  1. расширения параметров, как в $#, $var,${foo:-bar}
  2. подстановка команд, как в $(logname)(также ${ logname;}в некоторых оболочках, чтобы избежать подоболочки)
  3. арифметическое расширение, как в $((1+1))(также $[1+1]в некоторых оболочках).
  4. другие формы кавычек в некоторых оболочках, например $'\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 

Это сработает.

Связанный контент