Quand je tape, echo $PATHcela retourne my $PATH, mais je veux faire écho au mot $PATHet non à ce que la variable réelle représente, echo "$PATH"ne fonctionne pas non plus.
@ StéphaneChazelas Cette question est presque deux ans plus récente que celle-ci.
DisplayName
@ NomDisplay, oui, mais est conçu comme une question "canonique" pour couvrir toutes les "comment afficher le caractère spécial X". (Je ne suis pas sûr d'aimer l'idée que ces réponses "canoniques" couvrent tout ce qui est utilisée pour fermer des questions spécifiques, c'est pourquoi je l'ai simplement ajouté comme commentaire au lieu d'un vote serré).
Stéphane Chazelas
Réponses:
77
Vous avez juste besoin d'échapper au dollar $.:
echo \$PATH
$PATH
Ou entourez-le entre guillemets simples:
echo '$PATH'
$PATH
Cela garantira que le mot n'est pas interprété par le shell.
Merci, il n'a rien dit à propos echo -ede la page de manuel.
DisplayName
Le -edrapeau est utilisé pour développer, par exemple, \tun caractère de tabulation littéral. Cela n'a aucun rapport avec l'échappement du signe dollar pour empêcher l'expansion des paramètres.
Chepner
2
Cela ne fonctionne pas lorsque vous dirigez vers un fichier. echo '\$PATH' >> output.txtrésultats dans "/ usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin: / usr / games: / usr / local / games: / opt / vc / bin" en cours d'écriture dans le fichier , pas "$ PATH".
Cerin
2
Très intéressant, si vous utilisez des guillemets simples et un caractère d'échappement, alors cela devrait simplement faire écho à \ $ PATH. De quel OS / paquet provient votre echo comand?
geedoubleya
@Cerin for you @ stéphane réponse a travaillé, echo '\044*' > first.txtil produira $ * en premier.txt
maq
20
$dans la syntaxe de la plupart des coquillages est un caractère très spécial. Si nous ne regardons que les coquilles de type Bourne, il est utilisé pour introduire:
extensions paramètres comme dans $#, $var,${foo:-bar}
substitution de commande comme dans $(logname)(également ${ logname;}dans certains shells pour éviter le sous-shell)
expansion arithmétique comme dans $((1+1))(également $[1+1]dans certaines coquilles).
d'autres formes de citations dans certaines coquilles comme $'\n'ou $"localized string".
À l' exception de ce dernier cas, ces extensions / substitutions se produisent encore à l' intérieur des guillemets doubles (et à l' intérieur $"..."de bashou ksh93)
Pour que cela $ne soit pas traité spécialement, vous devez le citer avec:
guillemets simples: echo '$PATH'ou echo '$'PATH. Celui que vous voulez généralement utiliser car il échappe à tous les caractères (sauf lui-même) dans la plupart des obus.
blackslash: echo \$PATH. Aussi entre guillemets doubles:echo "\$PATH"
dans certains obus, un autre opérateur de citer: echo $'$PATH', echo $'\44PATH'( en supposant un charset compatible ASCII),echo $'\u0024'
Ou assurez-vous que cela ne fait pas partie d'une forme d'expansion valide, comme indiqué ci-dessus:
echo "$"PATH
echo $""PATH,echo $"PATH" . Ceux-ci devraient être évités parce que certains coquilles aiment ksh93et bashsoutiennent la $"..."forme de citations.
echo $``PATH. Aucune raison pour laquelle vous voudriez l'utiliser, sauf pour montrer que c'est possible.
echo "${$+$}PATH" et d'autres alambiqués ...
Ou vous pouvez sortir cette $autre manière:
avec une compatibilité Unix echo: echo '\044PATH'( echobesoin de quelque autre echo -e '\044PATH')
printf '\44PATH\n'
chat << \ EOF
$ PATH
EOF
Notez que ces barres obliques inverses doivent être citées car elles sont également spéciales pour le shell.
Si tout va bien, il devrait être clair maintenant que même s'il existe de nombreuses façons de le faire, il n'y a pas de bonne raison pour que vous souhaitiez utiliser autre chose que echo '$PATH'ici.
Notez que $ littéral entre guillemets doubles peut être un problème. Cela peut être fait en produisant le $ en dehors des guillemets, comme ceci:
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'
SORTIE:
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"comme déjà expliqué dans une autre réponse. Ou printf '%s is the value of $term\n' "$term"comme de toute façon, il ne faut pas utiliser echopour des données arbitraires.
S'il vous plaît ajouter un commentaire lorsque vous votez vers le bas
andreas-h
2
Ouec""h'''o''' ''""''\$P''A""TH''
Stéphane Chazelas
Je ne suis pas sûr de ce qui est tenté par cette réponse. La solution consiste à utiliser soit des guillemets simples, soit des \ $. echo '$ PATH' imprimera $ PATH echo '\ $ PATH' imprimera \ $ PATH echo "\ $ PATH" imprimera $ PATH echo '' \ $ PATH '' sera techniquement la bonne chose, mais les deux chaînes nulles ne servir à rien.
echo '$PATH'
. pour plus d'informations sur les citations, visitez ceci et celaRéponses:
Vous avez juste besoin d'échapper au dollar
$
.:Ou entourez-le entre guillemets simples:
Cela garantira que le mot n'est pas interprété par le shell.
la source
echo -e
de la page de manuel.-e
drapeau est utilisé pour développer, par exemple,\t
un caractère de tabulation littéral. Cela n'a aucun rapport avec l'échappement du signe dollar pour empêcher l'expansion des paramètres.echo '\$PATH' >> output.txt
résultats dans "/ usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin: / usr / games: / usr / local / games: / opt / vc / bin" en cours d'écriture dans le fichier , pas "$ PATH".echo '\044*' > first.txt
il produira $ * en premier.txt$
dans la syntaxe de la plupart des coquillages est un caractère très spécial. Si nous ne regardons que les coquilles de type Bourne, il est utilisé pour introduire:$#
,$var
,${foo:-bar}
$(logname)
(également${ logname;}
dans certains shells pour éviter le sous-shell)$((1+1))
(également$[1+1]
dans certaines coquilles).$'\n'
ou$"localized string"
.À l' exception de ce dernier cas, ces extensions / substitutions se produisent encore à l' intérieur des guillemets doubles (et à l' intérieur
$"..."
debash
ouksh93
)Pour que cela
$
ne soit pas traité spécialement, vous devez le citer avec:echo '$PATH'
ouecho '$'PATH
. Celui que vous voulez généralement utiliser car il échappe à tous les caractères (sauf lui-même) dans la plupart des obus.echo \$PATH
. Aussi entre guillemets doubles:echo "\$PATH"
echo $'$PATH'
,echo $'\44PATH'
( en supposant un charset compatible ASCII),echo $'\u0024'
Ou assurez-vous que cela ne fait pas partie d'une forme d'expansion valide, comme indiqué ci-dessus:
echo "$"PATH
. Ceux-ci devraient être évités parce que certains coquilles aimentecho $""PATH
,echo $"PATH"
ksh93
etbash
soutiennent la$"..."
forme de citations.echo $``PATH
. Aucune raison pour laquelle vous voudriez l'utiliser, sauf pour montrer que c'est possible.echo "${$+$}PATH"
et d'autres alambiqués ...Ou vous pouvez sortir cette
$
autre manière:echo
:echo '\044PATH'
(echo
besoin de quelque autreecho -e '\044PATH'
)printf '\44PATH\n'
Notez que ces barres obliques inverses doivent être citées car elles sont également spéciales pour le shell.
Si tout va bien, il devrait être clair maintenant que même s'il existe de nombreuses façons de le faire, il n'y a pas de bonne raison pour que vous souhaitiez utiliser autre chose que
echo '$PATH'
ici.la source
Notez que $ littéral entre guillemets doubles peut être un problème. Cela peut être fait en produisant le $ en dehors des guillemets, comme ceci:
SORTIE:
la source
echo "$term is the value of \$term"
comme déjà expliqué dans une autre réponse. Ouprintf '%s is the value of $term\n' "$term"
comme de toute façon, il ne faut pas utiliserecho
pour des données arbitraires.Utilisation:
Cela fonctionnera.
la source
ec""h'''o''' ''""''\$P''A""TH''