Wie kann ich Dollarzeichen wiedergeben?

67

Zum Beispiel $PATHund$HOME

Wenn ich tippe echo $PATH, gibt es mein zurück $PATH, aber ich möchte das Wort wiedergeben $PATHund nicht, wofür die tatsächliche Variable steht, echo "$PATH"funktioniert auch nicht.

Anzeigename
quelle
ja verwenden Apostroph wie: echo '$PATH'. Weitere Informationen zum Zitieren finden Sie hier und hier
Pandya
@don sah nur einen Betrüger auf Serverfehler. Mein Fehler.
Geedoubleya
Mögliches Duplikat von Wie verwende ich ein Sonderzeichen als normales?
Stéphane Chazelas
@ StéphaneChazelas Diese Frage ist fast zwei Jahre neuer als diese.
DisplayName
@DisplayName, ja, aber es handelt sich um eine "kanonische" Frage, mit der alle Fragen behandelt werden sollen, "wie ich das Sonderzeichen X anzeige". (Ich bin mir nicht sicher, ob ich die Idee mag, dass diese "kanonischen" Cover-It-All-Antworten verwendet werden, um bestimmte Fragen zu schließen, weshalb ich sie nur als Kommentar anstelle einer engen Abstimmung hinzugefügt habe.)
Stéphane Chazelas

Antworten:

77

Sie müssen nur dem Dollar entkommen $.:

echo \$PATH
$PATH

Oder setzen Sie es in einfache Anführungszeichen:

echo '$PATH'
$PATH

Dadurch wird sichergestellt, dass das Wort von der Shell nicht interpretiert wird.

geedoubleya
quelle
1
Danke, es wurde nichts echo -eauf der Manpage erwähnt.
DisplayName
Das -eFlag wird verwendet, um z. B. \tzu einem wörtlichen Tabulatorzeichen zu expandieren . Es hat nichts mit dem Dollarzeichen zu tun, um eine Parametererweiterung zu verhindern.
Chepner
2
Dies funktioniert nicht beim Weiterleiten an eine Datei. echo '\$PATH' >> output.txtDies führt dazu, dass "/ usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin: / usr / games: / usr / local / games: / opt / vc / bin" in die Datei geschrieben wird , nicht "$ PATH".
Cerin
2
Sehr interessant, wenn Sie einfache Anführungszeichen und ein maskiertes Zeichen verwenden, sollte dies nur \ $ PATH widerspiegeln. Von welchem ​​Betriebssystem / Paket stammt Ihr Echo-Befehl?
Geedoubleya
@Cerin für Sie @ Stephane Antwort funktionierte echo '\044*' > first.txtes wird $ * in first.txt
maq
20

$In der Syntax der meisten Shells ist ein ganz besonderes Zeichen. Wenn wir uns nur Bourne-ähnliche Muscheln ansehen, werden hiermit eingeführt:

  1. Parameter Ausdehnungen wie in $#, $var,${foo:-bar}
  2. Befehlsersetzung wie in $(logname)(auch ${ logname;}in einigen Shells zur Vermeidung der Subshell)
  3. arithmetische Erweiterung wie in $((1+1))(auch $[1+1]in einigen Schalen).
  4. andere Formen des Zitierens in einigen Schalen mögen $'\n'oder $"localized string".

Mit Ausnahme des letzten Falls treten diese Erweiterungen / Ersetzungen immer noch in doppelten Anführungszeichen (und $"..."in bashoder ksh93) auf.

Um zu verhindern, dass $dies speziell behandelt wird, müssen Sie Folgendes angeben:

  • einfache Anführungszeichen: echo '$PATH'oder echo '$'PATH. Das, das Sie normalerweise verwenden möchten, da es in den meisten Shells alle Zeichen (außer sich selbst) verliert.
  • blackslash: echo \$PATH. Auch in doppelten Anführungszeichen:echo "\$PATH"
  • in einigen Muscheln, einige andere zitieren Betreiber: echo $'$PATH', echo $'\44PATH'(eine ASCII - kompatible charset vorausgesetzt),echo $'\u0024'

Oder stellen Sie sicher, dass es nicht Teil einer gültigen Form der Erweiterung ist, wie oben aufgeführt:

  • echo "$"PATH
  • echo $""PATH,echo $"PATH" . Diese sollten vermieden werden, da einige Muscheln die Form von Anführungszeichen mögen ksh93und bashunterstützen $"...".
  • echo $``PATH. Kein Grund, warum Sie diesen verwenden möchten, außer um zu zeigen, dass es möglich ist.
  • echo "${$+$}PATH" und andere verschlungene ...

Oder Sie könnten das auf eine $andere Weise ausgeben :

  • mit einem Unix-konformen echo: echo '\044PATH'(einige andere echobrauchen echo -e '\044PATH')
  • printf '\44PATH\n'
  • cat << \ EOF
    $ PATH
    EOF

Beachten Sie, wie diese umgekehrten Schrägstriche angegeben werden müssen, da sie offensichtlich auch speziell für die Shell sind.

Sollte hoffentlich klar sein, dass es zwar viele Möglichkeiten gibt, dies zu tun, es aber keinen guten Grund gibt, etwas anderes als echo '$PATH'hier zu verwenden.

Stéphane Chazelas
quelle
1

Beachten Sie, dass $ in Anführungszeichen ein Problem sein kann. Sie können dies tun, indem Sie das $ außerhalb der doppelten Anführungszeichen wie folgt erzeugen:

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'

AUSGABE:

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
Stilez
quelle
Oder echo "$term is the value of \$term"wie bereits in einer anderen Antwort erläutert. Oder printf '%s is the value of $term\n' "$term"wie auch immer sollte man nicht echofür beliebige Daten verwenden.
Stéphane Chazelas
-2

Verwenden:

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

Das wird funktionieren.

Dima Kazavchinsky
quelle
2
Bitte gib einen Kommentar ab, wenn
du abstimmst
2
Oderec""h'''o''' ''""''\$P''A""TH''
Stéphane Chazelas
Ich bin nicht sicher, was mit dieser Antwort versucht wird. Die Antwort ist, entweder \ $ oder einfache Anführungszeichen zu verwenden. Das Echo '$ PATH' gibt $ PATH aus. Das Echo '\ $ PATH' gibt \ $ PATH aus. Das Echo "\ $ PATH" gibt $ PATH aus. Das Echo '' \ $ PATH '' macht technisch das Richtige, aber die beiden Nullzeichenfolgen dienen keinem Zweck.
Bobpaul