Cuando escribo echo $PATH, devuelve mi $PATH, pero quiero hacer eco de la palabra $PATHy no lo que representa la variable real, echo "$PATH"tampoco funciona.
@ StéphaneChazelas Esa pregunta es casi dos años más nueva que esta.
DisplayName
@DisplayName, sí, pero pretende ser una pregunta "canónica" para cubrir todos esos "cómo mostrar el carácter especial X". (No estoy seguro de que me guste la idea de que esas respuestas "canónicas" para cubrir todo se utilicen para cerrar preguntas específicas, por lo que acabo de agregarlas como un comentario en lugar de una votación cerrada).
Stéphane Chazelas
Respuestas:
77
Solo necesitas escapar del dólar $.
echo \$PATH
$PATH
O rodearlo con comillas simples:
echo '$PATH'
$PATH
Esto asegurará que la palabra no sea interpretada por el shell.
Gracias, no decía nada echo -een la página del manual.
DisplayName
La -ebandera se usa para expandir, por ejemplo, \ta un carácter de tabulación literal. No está relacionado con escapar del signo de dólar para evitar la expansión de parámetros.
chepner
2
Esto no funciona cuando se dirige a un archivo. echo '\$PATH' >> output.txtlos resultados en "/ usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin: / usr / games: / usr / local / games: / opt / vc / bin" se escriben en el archivo , no "$ PATH".
Cerin
2
Muy interesante, si está usando comillas simples y un carácter escapado, entonces eso debería hacer eco de \ $ PATH. ¿De qué sistema operativo / paquete proviene su comando de eco?
geedoubleya
@Cerin for you @ stéphane la respuesta funcionó echo '\044*' > first.txt, generará $ * en first.txt
maq
20
$En la sintaxis de la mayoría de las conchas hay un carácter muy especial. Si solo miramos las conchas tipo Bourne, se usa para introducir:
expansiones de parámetros como en $#, $var,${foo:-bar}
sustitución de comandos como en $(logname)(también ${ logname;}en algunos shells para evitar la subshell)
expansión aritmética como en $((1+1))(también $[1+1]en algunas conchas).
otras formas de citar en algunos shells como $'\n'o $"localized string".
Excepto por el último caso, esas expansiones / sustituciones todavía ocurren dentro de comillas dobles (y dentro $"..."de basho ksh93)
Para evitar que $se trate especialmente, debe citarlo con:
comillas simples: echo '$PATH'o echo '$'PATH. El que generalmente desea usar, ya que escapa a todos los caracteres (excepto a sí mismo) en la mayoría de los shells.
blackslash: echo \$PATH. También entre comillas dobles:echo "\$PATH"
en algunas conchas, algún otro operador de citar: echo $'$PATH', echo $'\44PATH'(suponiendo un juego de caracteres ASCII compatibles),echo $'\u0024'
O asegúrese de que no sea parte de una forma válida de expansión como se enumera arriba:
echo "$"PATH
echo $""PATH,echo $"PATH" . Deben evitarse porque a algunos shells les gusta ksh93y bashadmiten la $"..."forma de comillas.
echo $``PATH. No hay razón por la que quieras usar esa, excepto para demostrar que es posible.
echo "${$+$}PATH" y otras enrevesadas ...
O podría generar eso de $otra manera:
con un Unix-obediente echo: echo '\044PATH'(alguna otra echonecesidad s echo -e '\044PATH')
printf '\44PATH\n'
gato << \ EOF
$ RUTA
EOF
Tenga en cuenta que esas barras invertidas deben citarse, ya que obviamente también son especiales para el shell.
Con suerte, debería estar claro ahora que, aunque hay muchas formas de hacerlo, no hay una buena razón por la que quiera usar otra cosa que no sea echo '$PATH'aquí.
Tenga en cuenta que literal $ entre comillas dobles puede ser un problema. Se puede hacer produciendo $ fuera de las comillas dobles, así:
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'
SALIDA:
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"como ya se explicó en otra respuesta. O printf '%s is the value of $term\n' "$term"como de todos modos, uno no debería usar echopara datos arbitrarios.
No estoy seguro de lo que se intenta con esta respuesta. La respuesta es usar \ $ o comillas simples. echo '$ PATH' imprimirá $ PATH echo '\ $ PATH' imprimirá \ $ PATH echo "\ $ PATH" imprimirá $ PATH echo '' \ $ PATH '' técnicamente hará lo correcto, pero las dos cadenas nulas no sirve para nada.
echo '$PATH'
. para obtener más información acerca de las citas, visite esto y estoRespuestas:
Solo necesitas escapar del dólar
$
.O rodearlo con comillas simples:
Esto asegurará que la palabra no sea interpretada por el shell.
fuente
echo -e
en la página del manual.-e
bandera se usa para expandir, por ejemplo,\t
a un carácter de tabulación literal. No está relacionado con escapar del signo de dólar para evitar la expansión de parámetros.echo '\$PATH' >> output.txt
los resultados en "/ usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin: / usr / games: / usr / local / games: / opt / vc / bin" se escriben en el archivo , no "$ PATH".echo '\044*' > first.txt
, generará $ * en first.txt$
En la sintaxis de la mayoría de las conchas hay un carácter muy especial. Si solo miramos las conchas tipo Bourne, se usa para introducir:$#
,$var
,${foo:-bar}
$(logname)
(también${ logname;}
en algunos shells para evitar la subshell)$((1+1))
(también$[1+1]
en algunas conchas).$'\n'
o$"localized string"
.Excepto por el último caso, esas expansiones / sustituciones todavía ocurren dentro de comillas dobles (y dentro
$"..."
debash
oksh93
)Para evitar que
$
se trate especialmente, debe citarlo con:echo '$PATH'
oecho '$'PATH
. El que generalmente desea usar, ya que escapa a todos los caracteres (excepto a sí mismo) en la mayoría de los shells.echo \$PATH
. También entre comillas dobles:echo "\$PATH"
echo $'$PATH'
,echo $'\44PATH'
(suponiendo un juego de caracteres ASCII compatibles),echo $'\u0024'
O asegúrese de que no sea parte de una forma válida de expansión como se enumera arriba:
echo "$"PATH
. Deben evitarse porque a algunos shells les gustaecho $""PATH
,echo $"PATH"
ksh93
ybash
admiten la$"..."
forma de comillas.echo $``PATH
. No hay razón por la que quieras usar esa, excepto para demostrar que es posible.echo "${$+$}PATH"
y otras enrevesadas ...O podría generar eso de
$
otra manera:echo
:echo '\044PATH'
(alguna otraecho
necesidad secho -e '\044PATH'
)printf '\44PATH\n'
Tenga en cuenta que esas barras invertidas deben citarse, ya que obviamente también son especiales para el shell.
Con suerte, debería estar claro ahora que, aunque hay muchas formas de hacerlo, no hay una buena razón por la que quiera usar otra cosa que no sea
echo '$PATH'
aquí.fuente
Tenga en cuenta que literal $ entre comillas dobles puede ser un problema. Se puede hacer produciendo $ fuera de las comillas dobles, así:
SALIDA:
fuente
echo "$term is the value of \$term"
como ya se explicó en otra respuesta. Oprintf '%s is the value of $term\n' "$term"
como de todos modos, uno no debería usarecho
para datos arbitrarios.Utilizar:
Esto funcionará
fuente
ec""h'''o''' ''""''\$P''A""TH''