Como posso ecoar cifrões?

57

Por exemplo, $PATH e $HOME

Quando digito echo $PATH , ele retorna meu $PATH , mas quero fazer eco da palavra $PATH e não da variável real, echo "$PATH" também não funciona.

    
por DisplayName 16.10.2014 / 13:26

4 respostas

66

Você só precisa escapar do dólar $ .:

echo \$PATH
$PATH

Ou coloque entre aspas simples:

echo '$PATH'
$PATH

Isso garantirá que a palavra não seja interpretada pelo shell.

    
por 16.10.2014 / 13:28
19

$ na sintaxe da maioria dos shells é um caractere muito especial. Se olharmos apenas para as conchas do tipo Bourne, é usado para introduzir:

    Expansões de parâmetros
  1. 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 alguns shells).
  4. outras formas de cotação em alguns shells como $'\n' ou $"localized string" .

Exceto pelo último caso, essas expansões / substituições ainda ocorrem entre aspas duplas (e dentro de $"..." em bash ou ksh93 )

Para impedir que $ seja tratado especialmente, é necessário citá-lo com:

  • aspas simples: echo '$PATH' ou echo '$'PATH . Aquele que você geralmente deseja usar, pois ele escapa de todos os caracteres (exceto a si mesmo) na maioria dos shells.
  • blackslash: echo \$PATH . Também dentro de aspas duplas: echo "\$PATH"
  • em alguns shells, algum outro operador de cotação: echo $'$PATH' , echo $'PATH' (assumindo um charset compatível com ASCII), echo $'\u0024'

Ou certifique-se de que não faz parte de uma forma válida de expansão, conforme listado acima:

  • echo "$"PATH
  • echo $""PATH , echo $"PATH" . Esses devem ser evitados porque alguns shells como ksh93 e bash suportam a forma de aspas $"..." .
  • %código%. Não há razão para usar essa, exceto para mostrar que é possível.
  • echo $''PATH e outros complicados ...

Ou você pode gerar esse echo "${$+$}PATH" de outra forma:

  • com um $ : echo compatível com Unix (outros echo '4PATH' s precisam echo )
  • echo -e '4PATH'
  • cat << \EOF
    $PATH
    EOF

Note como essas barras invertidas precisam ser citadas, pois elas também são especiais para o shell.

Espero que esteja claro agora que, embora haja muitas maneiras de fazer isso, não há uma boa razão para você usar qualquer outra coisa além de printf 'PATH\n' aqui.

    
por 14.09.2016 / 12:37
1

Observe que as aspas duplas literais $ dentro podem ser um problema. Isso pode ser feito produzindo o $ 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'

OUTPUT:

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
    
por 09.01.2018 / 14:49
-2

Uso:

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

Isso funcionará.

    
por 06.03.2016 / 17:30

Tags