Quando digito, echo $PATHele retorna meu $PATH, mas quero repetir a palavra $PATHe não o que a variável real representa, echo "$PATH"também não funciona.
@ StéphaneChazelas Essa pergunta é quase dois anos mais nova que esta.
DisplayName
@DisplayName, sim, mas pretende ser uma pergunta "canônica" para cobrir todos aqueles "como exibir caractere especial X". (Não tenho certeza se gosto da idéia de que essas respostas "canônicas" de cobertura geral sejam usadas para fechar perguntas específicas, motivo pelo qual acabei de adicioná-lo como um comentário em vez de uma votação apertada).
Stéphane Chazelas
Respostas:
77
Você só precisa escapar do dólar $.
echo \$PATH
$PATH
Ou coloque-o entre aspas simples:
echo '$PATH'
$PATH
Isso garantirá que a palavra não seja interpretada pelo shell.
Obrigado, não disse nada sobre echo -ea página de manual.
DisplayName
O -esinalizador é usado para expandir, por exemplo, \tum caractere de tabulação literal. Não está relacionado a escapar do cifrão para impedir a expansão dos parâmetros.
Chepner # 16/14
2
Isso não funciona ao direcionar para um arquivo. echo '\$PATH' >> output.txtresulta em "/ usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin: / usr / jogos: / usr / local / jogos: / opt / vc / bin" sendo gravados no arquivo , não "$ PATH".
Cerin
2
Muito interessante, se você estiver usando aspas simples e um caractere de escape, isso deve ecoar \ $ PATH. De qual sistema operacional / pacote é seu comando de eco?
geedoubleya
@Cerin para você @ resposta Stéphane trabalhou echo '\044*' > first.txta saída será $ * em first.txt
maq
20
$na sintaxe da maioria das conchas é um caractere muito especial. Se olharmos apenas para as conchas tipo Bourne, é usado para introduzir:
expansões de parâmetros como em $#, $var,${foo:-bar}
substituição de comando como em $(logname)(também ${ logname;}em alguns shells para evitar o subshell)
expansão aritmética como em $((1+1))(também $[1+1]em algumas conchas).
outras formas de citação em algumas conchas como $'\n'ou $"localized string".
Exceto no último caso, essas expansões / substituições ainda ocorrem entre aspas duplas (e dentro $"..."de bashou ksh93)
Para impedir que isso $seja tratado especialmente, você precisa citá-lo com:
aspas simples: echo '$PATH'ou echo '$'PATH. O que você geralmente deseja usar, pois escapa a todos os caracteres (exceto a si mesmo) na maioria das conchas.
blackslash: echo \$PATH. Também dentro de aspas duplas:echo "\$PATH"
em algumas conchas, algum outro operador citar: echo $'$PATH', echo $'\44PATH'(assumindo um conjunto de caracteres ASCII compatível),echo $'\u0024'
Ou verifique se não faz parte de uma forma válida de expansão, conforme listado acima:
echo "$"PATH
echo $""PATH,echo $"PATH" . Isso deve ser evitado porque algumas conchas gostam ksh93e bashsuportam a $"..."forma de aspas.
echo $``PATH. Não há razão para que você queira usá-lo, exceto para mostrar que é possível.
echo "${$+$}PATH" e outros complicados ...
Ou você pode imprimir de $outra maneira:
com um compatível com Unix echo: echo '\044PATH'(alguns outros echoprecisam echo -e '\044PATH')
printf '\44PATH\n'
cat << \ EOF
$ PATH
EOF
Observe como essas barras invertidas precisam ser citadas, pois também são especiais para o shell, obviamente.
Espero que esteja claro agora que, embora existam muitas maneiras de fazer isso, não há uma boa razão para você querer usar outra coisa, exceto echo '$PATH'aqui.
Observe que $ dentro de aspas duplas literais podem ser um problema. Isso pode ser feito produzindo $ fora das aspas duplas, assim:
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'
RESULTADO:
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
Ou echo "$term is the value of \$term"como já explicado em outra resposta. Ou printf '%s is the value of $term\n' "$term", de qualquer maneira, não se deve usar echodados arbitrários.
Não tenho certeza do que está sendo tentado por esta resposta. A resposta é usar \ $ ou aspas simples. echo '$ PATH' imprimirá $ PATH echo '\ $ PATH' imprimirá \ $ PATH echo "\ $ PATH" imprimirá $ PATH echo '' \ $ PATH '' tecnicamente fará a coisa certa, mas as duas cadeias nulas não serve para nada.
echo '$PATH'
. Para mais informações sobre citando, visite este e esteRespostas:
Você só precisa escapar do dólar
$
.Ou coloque-o entre aspas simples:
Isso garantirá que a palavra não seja interpretada pelo shell.
fonte
echo -e
a página de manual.-e
sinalizador é usado para expandir, por exemplo,\t
um caractere de tabulação literal. Não está relacionado a escapar do cifrão para impedir a expansão dos parâmetros.echo '\$PATH' >> output.txt
resulta em "/ usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin: / usr / jogos: / usr / local / jogos: / opt / vc / bin" sendo gravados no arquivo , não "$ PATH".echo '\044*' > first.txt
a saída será $ * em first.txt$
na sintaxe da maioria das conchas é um caractere muito especial. Se olharmos apenas para as conchas tipo Bourne, é usado para introduzir:$#
,$var
,${foo:-bar}
$(logname)
(também${ logname;}
em alguns shells para evitar o subshell)$((1+1))
(também$[1+1]
em algumas conchas).$'\n'
ou$"localized string"
.Exceto no último caso, essas expansões / substituições ainda ocorrem entre aspas duplas (e dentro
$"..."
debash
ouksh93
)Para impedir que isso
$
seja tratado especialmente, você precisa citá-lo com:echo '$PATH'
ouecho '$'PATH
. O que você geralmente deseja usar, pois escapa a todos os caracteres (exceto a si mesmo) na maioria das conchas.echo \$PATH
. Também dentro de aspas duplas:echo "\$PATH"
echo $'$PATH'
,echo $'\44PATH'
(assumindo um conjunto de caracteres ASCII compatível),echo $'\u0024'
Ou verifique se não faz parte de uma forma válida de expansão, conforme listado acima:
echo "$"PATH
. Isso deve ser evitado porque algumas conchas gostamecho $""PATH
,echo $"PATH"
ksh93
ebash
suportam a$"..."
forma de aspas.echo $``PATH
. Não há razão para que você queira usá-lo, exceto para mostrar que é possível.echo "${$+$}PATH"
e outros complicados ...Ou você pode imprimir de
$
outra maneira:echo
:echo '\044PATH'
(alguns outrosecho
precisamecho -e '\044PATH'
)printf '\44PATH\n'
Observe como essas barras invertidas precisam ser citadas, pois também são especiais para o shell, obviamente.
Espero que esteja claro agora que, embora existam muitas maneiras de fazer isso, não há uma boa razão para você querer usar outra coisa, exceto
echo '$PATH'
aqui.fonte
Observe que $ dentro de aspas duplas literais podem ser um problema. Isso pode ser feito produzindo $ fora das aspas duplas, assim:
RESULTADO:
fonte
echo "$term is the value of \$term"
como já explicado em outra resposta. Ouprintf '%s is the value of $term\n' "$term"
, de qualquer maneira, não se deve usarecho
dados arbitrários.Usar:
Isso vai funcionar.
fonte
ec""h'''o''' ''""''\$P''A""TH''