Як я можу повторювати знаки долара?


67

Наприклад, $PATHі$HOME

Коли я набираю, echo $PATHвін повертає своє $PATH, але я хочу повторити слово, $PATHа не те, що означає фактична змінна, echo "$PATH"також не працює.


да використовувати одиничні лапки , як: echo '$PATH'. Для отримання додаткової інформації про цитування, відвідайте це та це
Pandya

@don бачив лише дуп на сервері за замовчуванням. Моє ліжко.
geedoubleya


@ StéphaneChazelas Це питання майже на два роки новіше, ніж це.
DisplayName

@DisplayName, так, але призначений як "канонічне" питання, яке охоплює всі "як мені відобразити спеціальний символ X". (Я не впевнений, що мені подобається ідея тих "канонічних" відповідей, які використовуються для закриття конкретних питань, хоча я просто додав її як коментар замість закритого голосування).
Стефан Шазелас

Відповіді:


77

Вам просто потрібно втекти від долара $.:

echo \$PATH
$PATH

Або оточіть його в одиничних лапках:

echo '$PATH'
$PATH

Це забезпечить, що слово не інтерпретується оболонкою.


1
Дякую, echo -eна сторінці чоловіка нічого не було сказано .
DisplayName

-eПрапор використовується для розширення, наприклад, \tв буквальному табуляції. Це не пов’язане з уникненням знаку долара, щоб запобігти розширенню параметрів.
чепнер

2
Це не працює під час переходу до файлу. echo '\$PATH' >> output.txtрезультати в "/ usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin: / usr / games: / usr / local / games: / opt / vc / bin" записується у файл , а не "$ PATH".
Серін

2
Дуже цікаво, якщо ви використовуєте одинарні лапки та символ, що втік, то це повинно просто перегукуватися \ $ PATH. З якої ОС / пакета походить ваш ехокоманд?
geedoubleya

@Cerin для вас @ Stéphane відповідь працював echo '\044*' > first.txtвін буде виводити $ * в first.txt
Maq

20

$у синтаксисі більшості оболонок дуже особливий символ. Якщо ми подивимось лише на оболонки Борна, то це використовується для введення:

  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
    $ ПАТ
    EOF

Зверніть увагу, як потрібно робити цитування цих косих рисочків, оскільки вони, очевидно, особливі для оболонки.

Якщо ми сподіваємося, до цього часу буде зрозуміло, що хоча існує багато способів зробити це, немає жодної вагомої причини, щоб ви хотіли використовувати щось інше, окрім як echo '$PATH'тут.


1

Зауважте, що буквальні $ всередині подвійних лапок можуть бути проблемою. Це можна зробити, створивши $ за межами подвійних лапок, наприклад:

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для довільних даних.
Стефан Шазелас

-2

Використання:

echo ''\$PATH'' >> output.txt 

Це спрацює.


2
Будь ласка, додайте коментар при голосуванні
andreas-h

2
Абоec""h'''o''' ''""''\$P''A""TH''
Стефан Шазелас

Я не впевнений, на що намагаються відповісти. Відповідь - використовувати або \ $, або окремі лапки. echo '$ PATH' надрукує $ PATH echo '\ $ PATH' надрукує \ $ PATH echo "\ $ PATH" надрукує $ PATH echo '' \ $ PATH '' технічно зробить правильно, але дві нульові рядки не служать меті.
bobpaul
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.