GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cuál es el significado de un signo de dólar doble en bash/Makefile?

Según gnu make oficial doc:

Las referencias a variables y funciones en las recetas tienen una sintaxis y una semántica idénticas a las referencias en otras partes del archivo MAKE. También tienen las mismas reglas de cotización:si desea que aparezca un signo de dólar en su receta, debe duplicarlo ("$$"). Para shells como el shell predeterminado, que usa signos de dólar para introducir variables, es importante tener claro si la variable a la que desea hacer referencia es una variable make (use un solo signo de dólar) o una variable de shell (use dos signos de dólar).

En resumen:

  • variable makefile => usar un solo signo de dólar
  • variable de shell => usar dos signos de dólar

$$ es el PID de su proceso actual.

$ ps -ef|grep $$
user       208465  200620  0 10:30 pts/4    00:00:00 bash

$ for number in 1 2 3 4 ; do \
    echo $$number ; \
done
208465number
208465number
208465number
208465number

No se aplica directamente a este ejemplo, excepto si el código que se muestra se ejecuta a través de $(shell ...) en lugar de ser una regla:

Con la expansión secundaria habilitada, make también podría interpretar el dólar doble en la segunda fase de procesamiento, cuando aparece en la lista de requisitos previos. (Primera fase:leer archivo, establecer variables; segunda fase:encontrar e invocar objetivos de dependencia, ejecutar reglas)

Esto se usa para permitir la especificación dinámica de destinos de dependencia, cuando la variable con el nombre de destino solo está disponible más adelante en el archivo.

Consulte https://www.gnu.org/software/make/manual/html_node/Secondary-Expansion.html.


Linux
  1. Bash secuencias de comandos (I)

  2. ¿Qué son los separadores de palabras de Readline?

  3. ¿Entiendes el significado de `$_`?

  4. ¿Cuál es el significado de *nix?

  5. ¿Cuál es el significado de fork() y grep en Linux?

Variable de exportación de bash

¿Cuál es la diferencia entre #!/usr/bin/env bash y #!/usr/bin/bash?

¿Cuál es el uso de $# en Bash?

¿Cuál es el significado de `! -d` en este comando Bash?

¿Qué hace la -e en un bash shebang?

¿Cuál es la diferencia entre $(CC) y $CC?