Por exemplo, $PATH
e$HOME
Quando digito, echo $PATH
ele retorna meu $PATH
, mas quero repetir a palavra $PATH
e não o que a variável real representa, echo "$PATH"
também não funciona.
Por exemplo, $PATH
e$HOME
Quando digito, echo $PATH
ele retorna meu $PATH
, mas quero repetir a palavra $PATH
e não o que a variável real representa, echo "$PATH"
também não funciona.
Respostas:
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.
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 $"..."
de bash
ou ksh93
)
Para impedir que isso $
seja tratado especialmente, você precisa citá-lo com:
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.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
echo $""PATH
,echo $"PATH"
ksh93
e bash
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 outros echo
precisam 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
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 echo
dados arbitrários.
Usar:
echo ''\$PATH'' >> output.txt
Isso vai funcionar.
ec""h'''o''' ''""''\$P''A""TH''
echo '$PATH'
. Para mais informações sobre citando, visite este e este