Comment puis-je faire écho des signes dollar?

67

Par exemple, $PATHet$HOME

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.

Afficher un nom
la source
oui utiliser comme guillemet simple: echo '$PATH'. pour plus d'informations sur les citations, visitez ceci et cela
Pandya
@don a seulement vu une dupe sur serverfault. Ma faute.
Geedoubleya
@ 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.

Geedoubleya
la source
1
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:

  1. extensions paramètres comme dans $#, $var,${foo:-bar}
  2. substitution de commande comme dans $(logname)(également ${ logname;}dans certains shells pour éviter le sous-shell)
  3. expansion arithmétique comme dans $((1+1))(également $[1+1]dans certaines coquilles).
  4. 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.

Stéphane Chazelas
la source
1

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
Stilez
la source
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.
Stéphane Chazelas
-2

Utilisation:

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

Cela fonctionnera.

Dima Kazavchinsky
la source
2
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.
bobpaul