web-dev-qa-db-fra.com

Comment puis-je faire écho aux signes du dollar?

Par exemple, $PATH et $HOME

Quand je tape echo $PATH il retourne mon $PATH, mais je veux faire écho à la Parole $PATH et non pas ce que représente la variable réelle, echo "$PATH" ne fonctionne pas non plus.

70
DisplayName

Vous avez juste besoin d'échapper au dollar $ .:

echo \$PATH
$PATH

Ou entourez-le de guillemets simples:

echo '$PATH'
$PATH

Cela garantira que le mot n'est pas interprété par le shell.

80
geedoubleya

$ Dans la syntaxe de la plupart des shells est un caractère très spécial. Si nous ne regardons que les coquilles de type Bourne, elles sont utilisées pour introduire:

  1. extensions de paramètres comme dans $#, $var, ${foo:-bar}
  2. substitution de commande comme dans $(logname) (aussi ${ logname;} dans certains shells pour éviter le sous-shell)
  3. expansion arithmétique comme dans $((1+1)) (aussi $[1+1] dans certains shells).
  4. d'autres formes de citation dans certains shells comme $'\n' ou $"localized string".

À l'exception du dernier cas, ces extensions/substitutions se produisent toujours entre guillemets doubles (et à l'intérieur de $"..." Dans bash ou ksh93)

Pour empêcher que $ Soit traité spécialement, vous devez le citer avec:

  • guillemets simples: echo '$PATH' ou echo '$'PATH. Celui que vous voudriez généralement utiliser car il échappe à tous les personnages (sauf lui-même) dans la plupart des coquilles.
  • barre oblique noire: echo \$PATH. Également à l'intérieur des guillemets doubles: echo "\$PATH"
  • dans certains shells, un autre opérateur de citation: echo $'$PATH', echo $'\44PATH' (en supposant un ASCII charset compatible), 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 doivent être évités car certains shells comme ksh93 Et bash prennent en charge la forme $"..." De guillemets.
  • 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 générer ce $ D'une autre manière:

  • avec un echo conforme à Unix: echo '\044PATH' (certains autres echo ont besoin de echo -e '\044PATH')
  • printf '\44PATH\n'
  • cat <<\EOF 
     $ PATH 
     EOF

Notez comment ces barres obliques inverses doivent être citées car elles sont également spéciales pour le shell, évidemment.

Si tout va bien il devrait être clair maintenant que bien qu'il existe de nombreuses façons de le faire, il n'y a aucune bonne raison que vous voudriez utiliser autre chose que echo '$PATH' Ici.

21
Stéphane Chazelas

Notez que le littéral $ entre guillemets doubles peut être un problème. Cela peut être fait en produisant le $ en dehors des guillemets doubles, 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
1
Stilez