texto script manejo lineas linea leer fichero extraer ejemplos como comandos cadenas basicos archivo agregar makefile

makefile - script - Haga que el archivo echo muestre la cadena "$ PATH"



manejo de cadenas en shell script (2)

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

La función de valor proporciona una forma de usar el valor de una variable sin tener que expandirla. Tenga en cuenta que esto no deshace las 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 usar la variable directamente.

La sintaxis de la función de valor es:

$(value variable)

Tenga en cuenta que variable es el nombre de una variable; no una referencia a esa variable. Por lo tanto, normalmente no usarías un ''$'' o paréntesis al escribirlo. (Sin embargo, puede usar una referencia de 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 la variable, sin que se produzca ninguna expansión. Por ejemplo, en este archivo MAKE:

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

La primera línea de salida sería ATH, ya que el "$ P" se expandiría como una variable make, mientras que la segunda línea de salida sería el valor actual de la variable de entorno $ PATH, ya que la función de valor evitó la expansión.

Estoy tratando de forzar que el archivo muestre la siguiente cadena:

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

El problema es con "$PATH" . Mando

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

causa un resultado

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

cualquier combinación de caracteres de escape, comillas, "$(shell echo " no obtuvo los resultados requeridos ...

¿Alguna sugerencia?


La make usa $ para sus propias expansiones de variables . Ej. Variable $A solo carácter $A o variable con un nombre largo - ${VAR} y $(VAR) .

Para poner $ en un comando, use $$ , por ejemplo:

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

También tenga en cuenta que para make "" y '''' (comillas dobles e individuales) no juegue ningún papel, se pasan literalmente al intérprete de comandos. (Elimine el signo @ para ver qué make envíe al shell.) Para evitar que el shell expanda $PATH , la segunda línea usa el '''' .