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.
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.
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 -esulla pagina man.
-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.
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".
echo '\044*' > first.txtprodurrà $ * 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 basho 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 "$"PATHecho $""PATH,echo $"PATH"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:
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.
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 echoper 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