web-dev-qa-db-fra.com

Faire que le fichier echo affiche la chaîne "$ PATH"

J'essaie de forcer le fichier make à afficher la chaîne suivante:

"Please execute next commands:
setenv PATH /usr/local/greenhills/mips5/linux86:$PATH"

Le problème est avec "$PATH". Commander

@echo "setenv PATH /usr/local/greenhills/mips5/linux86:$PATH"

provoquer un résultat

"setenv PATH /usr/local/greenhills/mips5/linux86:ATH"

toute combinaison de caractères d'échappement, guillemets, "$(Shell echo " n'a pas obtenu les résultats requis ...

Aucune suggestion?

42
BaruchLi

Dans le manuel pour GNU make , ils parlent de cet exemple spécifique lors de la description de la fonction value:

La fonction value vous permet d'utiliser la valeur d'une variable sans la développer. Veuillez noter que cela n'annule pas les extensions déjà réalisées; Par exemple, si vous créez une variable simplement développée, sa valeur est développée lors de la définition. dans ce cas, la fonction value retournera le même résultat que si vous utilisiez directement la variable.

La syntaxe de la fonction value est la suivante:

 $(value variable)

Notez que variable est le nom d'une variable. pas une référence à cette variable. Par conséquent, vous ne devez normalement pas utiliser un "$" ou des parenthèses lors de sa rédaction. (Vous pouvez toutefois utiliser une référence de variable dans le nom si vous souhaitez que le nom ne soit pas une constante.)

Le résultat de cette fonction est une chaîne contenant la valeur de variable, sans aucune expansion. Par exemple, dans ce makefile:

 FOO = $PATH

 all:
         @echo $(FOO)
         @echo $(value FOO)

La première ligne de sortie serait ATH, puisque le "$ P" serait étendu en tant que variable make, tandis que la deuxième ligne de sortie serait la valeur actuelle de votre variable d'environnement $ PATH, car la fonction value évitait l'expansion.

49
gsingh2011

make utilise le $ Pour ses propres extensions de variable . Par exemple. Variable à caractère unique $A ou variable avec un nom long - ${VAR} et $(VAR).

Pour placer le $ Dans une commande, utilisez le $$, Par exemple:

all:
  @echo "Please execute next commands:"
  @echo 'setenv PATH /usr/local/greenhills/mips5/linux86:$$PATH'

Notez également que pour make, les "" Et '' (Guillemets simples et simples) ne jouent aucun rôle et sont transmis textuellement au shell. (Supprimez le signe @ Pour voir ce que make envoie à Shell.) Pour empêcher le shell de développer $PATH, La deuxième ligne utilise le ''.

20
Dummy00001