Como posso ecoar cifrões?


67

Por exemplo, $PATHe$HOME

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.


sim usar aspas simples como: echo '$PATH'. Para mais informações sobre citando, visite este e este
Pandya

O @don viu apenas um erro na falha do servidor. Minha culpa.
geedoubleya


@ 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.


11
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:

  1. expansões de parâmetros como em $#, $var,${foo:-bar}
  2. substituição de comando como em $(logname)(também ${ logname;}em alguns shells para evitar o subshell)
  3. expansão aritmética como em $((1+1))(também $[1+1]em algumas conchas).
  4. 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.


1

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.
Stéphane Chazelas

-2

Usar:

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

Isso vai funcionar.


2
adicione um comentário ao votar em baixa
andreas-h

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

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.
bobpaul
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.