Ad esempio, $PATH
e$HOME
Quando scrivo echo $PATH
restituisce my $PATH
, ma voglio riecheggiare la parola $PATH
e non ciò che rappresenta la variabile effettiva, echo "$PATH"
non funziona neanche.
Ad esempio, $PATH
e$HOME
Quando scrivo echo $PATH
restituisce my $PATH
, ma voglio riecheggiare la parola $PATH
e non ciò che rappresenta la variabile effettiva, echo "$PATH"
non funziona neanche.
Risposte:
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.
echo -e
sulla pagina man.
-e
flag viene utilizzato per espandere, ad esempio, \t
un carattere di tabulazione letterale. Non è correlato alla fuga dal simbolo del dollaro per impedire l'espansione dei parametri.
echo '\$PATH' >> output.txt
risulta che "/ usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin: / usr / games: / usr / local / games: / opt / vc / bin" viene scritto nel file , non "$ PERCORSO".
echo '\044*' > first.txt
produrrà $ * in first.txt
$
nella sintassi della maggior parte delle shell è un personaggio molto speciale. Se guardiamo solo a gusci tipo Bourne, viene utilizzato per introdurre:
$#
, $var
,${foo:-bar}
$(logname)
(anche ${ logname;}
in alcune shell per evitare la subshell)$((1+1))
(anche $[1+1]
in alcune conchiglie).$'\n'
o $"localized string"
.Ad eccezione dell'ultimo caso, tali espansioni / sostituzioni si verificano ancora tra virgolette doppie (e all'interno $"..."
in bash
o ksh93
)
Per impedire che $
venga trattato in modo speciale, è necessario citarlo con:
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.echo \$PATH
. Anche all'interno di doppie virgolette:echo "\$PATH"
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"
ksh93
e bash
supporta 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:
echo
: echo '\044PATH'
(alcune altre echo
esigenze 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.
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
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 echo
per dati arbitrari.
Uso:
echo ''\$PATH'' >> output.txt
Questo funzionerà.
ec""h'''o''' ''""''\$P''A""TH''
echo '$PATH'
. per ulteriori informazioni sulla citazione, visitare questo e questo