2010-09-14 15 views
33

estoy tratando de forzar a hacer archivo para mostrar siguiente cadena:

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

El problema es con "$PATH". Comando

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

causa resultado

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

cualquier combinación de caracteres de escape, citas, "$(shell echo " resultados no consiguió requeridos ...

¿Alguna sugerencia?

Respuesta

37

En el manual for GNU make, hablan de este ejemplo específico al describir la función value:

La función de valor proporciona una forma para que pueda utilizar el valor de una variable sin tener que ampliarse. Tenga en cuenta que esto no deshacer expansiones que ya se han producido; por ejemplo, si crea una variable simplemente expandida, su valor se expande durante la definición ; en ese caso, la función de valor devolverá el mismo resultado que el uso de la variable directamente.

La sintaxis de la función de valor es:

$(value variable) 

Tenga en cuenta que la variable es el nombre de una variable; no una referencia a esa variable. Por lo tanto, normalmente no usaría a '$' o paréntesis al escribirlo. (Puede, sin embargo, utiliza una referencia variable en el nombre si desea que el nombre no sea una constante .)

El resultado de esta función es una cadena que contiene el valor de variables, sin ningún tipo de expansión que ocurre . Por ejemplo, en este makefile:

FOO = $PATH 

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

La primera línea de salida sería ATH, ya que el “$ P” se extendería como una variable de marca, mientras que la segunda línea de salida sería el valor actual de su $ PATH environment variable, ya que la función de valor evitó la expansión.

+0

Gracias por señalar que la declaración de variables se realiza fuera del objetivo. ¿Se pueden definir dentro de un objetivo? – Crt

12

El make utiliza el $ para su propio variable expansions. P.ej. variable de un solo carácter $A o variable con un nombre largo - ${VAR} y $(VAR).

Para poner el $ en un comando, utilice el $$, por ejemplo:

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

También tenga en cuenta que a make la "" y '' (doble y sencillo citar) no juegan ningún papel y que se pasan literalmente al caparazón. (Elimine el signo @ para ver lo que make envía al shell). Para evitar que el shell se expanda $PATH, la segunda línea usa ''.

+0

¡Gracias, me diste la dirección! @echo "setenv PATH/usr/local/greenhills/mips5/linux86: $$ PATH" mayúscula y minúscula $ PATH para imprimir, pero @echo 'setenv PATH/usr/local/greenhills/mips5/linux86: $$ PATH ' ¡Hacer el trabajo! – BaruchLi

+0

Porque, como he notado, los '" "' y '''' se pasan al shell. Dentro del shell '" "' se expandiría el '$ PATH', pero no dentro del' '' '. – Dummy00001

+0

Gracias por el recordatorio que ha sido tan largo desde que utilicé make –

Cuestiones relacionadas