Come posso eco i segni del dollaro?


67

Ad esempio, $PATHe$HOME

Quando scrivo echo $PATHrestituisce my $PATH, ma voglio riecheggiare la parola $PATHe non ciò che rappresenta la variabile effettiva, echo "$PATH"non funziona neanche.


Si uso singola citazione come: echo '$PATH'. per ulteriori informazioni sulla citazione, visitare questo e questo
Pandya,

@don ha visto solo un duplicato su serverfault. Colpa mia.
geedoubleya,


@ StéphaneChazelas Questa domanda è quasi due anni più recente di questa.
DisplayName

@DisplayName, sì, ma è inteso come una domanda "canonica" per coprire tutti quei "come visualizzare il carattere speciale X". (Non sono sicuro che mi piaccia l'idea di quelle risposte "canoniche" che vengono usate per chiudere domande specifiche, ma è per questo che l'ho appena aggiunto come commento invece che come voto da vicino).
Stéphane Chazelas,

Risposte:


77

Devi solo scappare dal dollaro $.:

echo \$PATH
$PATH

O circondalo tra virgolette singole:

echo '$PATH'
$PATH

Questo assicurerà che la parola non sia interpretata dalla shell.


1
Grazie, non ha detto nulla echo -esulla pagina man.
DisplayName

Il -eflag viene utilizzato per espandere, ad esempio, \tun carattere di tabulazione letterale. Non è correlato alla fuga dal simbolo del dollaro per impedire l'espansione dei parametri.
Chepner,

2
Questo non funziona quando si dirige verso un file. echo '\$PATH' >> output.txtrisulta che "/ usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin: / usr / games: / usr / local / games: / opt / vc / bin" viene scritto nel file , non "$ PERCORSO".
Cerin,

2
Molto interessante, se stai usando virgolette singole e un carattere di escape, questo dovrebbe fare eco a \ $ PATH. Da quale sistema operativo / pacchetto proviene il tuo comando eco?
Geedoubleya,

La risposta di @Cerin for you @ stéphane ha funzionato echo '\044*' > first.txtprodurrà $ * in first.txt
maq

20

$nella sintassi della maggior parte delle shell è un personaggio molto speciale. Se guardiamo solo a gusci tipo Bourne, viene utilizzato per introdurre:

  1. espansioni di parametri come in $#, $var,${foo:-bar}
  2. sostituzione dei comandi come in $(logname)(anche ${ logname;}in alcune shell per evitare la subshell)
  3. espansione aritmetica come in $((1+1))(anche $[1+1]in alcune conchiglie).
  4. altre forme di citazione in alcune conchiglie come $'\n'o $"localized string".

Ad eccezione dell'ultimo caso, tali espansioni / sostituzioni si verificano ancora tra virgolette doppie (e all'interno $"..."in basho ksh93)

Per impedire che $venga trattato in modo speciale, è necessario citarlo con:

  • virgolette singole: echo '$PATH'o echo '$'PATH. Quello che vorresti generalmente usare in quanto sfugge a tutti i caratteri (tranne se stesso) nella maggior parte delle shell.
  • blackslash: echo \$PATH. Anche all'interno di doppie virgolette:echo "\$PATH"
  • in alcune conchiglie, qualche altro operatore citando: echo $'$PATH', echo $'\44PATH'(ipotizzando un set di caratteri ASCII compatibile),echo $'\u0024'

Oppure assicurati che non faccia parte di una forma di espansione valida come elencato sopra:

  • echo "$"PATH
  • echo $""PATH,echo $"PATH" . Questi dovrebbero essere evitati perché ad alcune conchiglie piace ksh93e bashsupporta la $"..."forma delle virgolette.
  • echo $``PATH. Nessun motivo per cui vorresti usarlo se non per dimostrare che è possibile.
  • echo "${$+$}PATH" e altri contorti ...

O potresti farlo in $un altro modo:

  • con un conforme Unix echo: echo '\044PATH'(alcune altre echoesigenze echo -e '\044PATH')
  • printf '\44PATH\n'
  • gatto << \ EOF
    $ PATH
    EOF

Nota come queste barre rovesciate devono essere citate in quanto sono ovviamente speciali per la shell.

Speriamo che a questo punto sia chiaro che, sebbene ci siano molti modi per farlo, non c'è motivo per cui tu voglia usare qualcos'altro se non echo '$PATH'qui.


1

Si noti che $ letterali tra virgolette doppie possono essere un problema. Può essere fatto producendo $ al di fuori delle doppie virgolette, in questo modo:

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'

PRODUZIONE:

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

O echo "$term is the value of \$term"come già spiegato in un'altra risposta. O printf '%s is the value of $term\n' "$term"come comunque non si dovrebbe usare echoper dati arbitrari.
Stéphane Chazelas,

-2

Uso:

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

Questo funzionerà.


2
si prega di aggiungere un commento quando si vota verso il basso
andreas-h

2
Oppureec""h'''o''' ''""''\$P''A""TH''
Stéphane Chazelas,

Non sono sicuro di cosa stia tentando questa risposta. La risposta è utilizzare \ $ o virgolette singole. echo '$ PATH' stamperà $ PATH echo '\ $ PATH' stamperà \ $ ​​PATH echo "\ $ PATH" stamperà $ PATH echo '' \ $ PATH '' tecnicamente farà la cosa giusta, ma le due stringhe nulle non serve a niente.
bobpaul,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.