GNU/Linux >> Linux Esercitazione >  >> Linux

Qual è il significato di un doppio segno di dollaro in bash/Makefile?

Come per gnu make official doc:

I riferimenti a variabili e funzioni nelle ricette hanno sintassi e semantica identiche ai riferimenti altrove nel makefile. Hanno anche le stesse regole di quotazione:se vuoi che appaia il simbolo del dollaro nella tua ricetta, devi raddoppiarlo ("$$"). Per shell come la shell di default, che usano i simboli del dollaro per introdurre le variabili, è importante tenere ben chiaro se la variabile a cui vuoi fare riferimento è una variabile make (usa un singolo simbolo del dollaro) o una variabile di shell (usa due simboli del dollaro). /P>

Quindi in breve:

  • variabile makefile => usa un singolo simbolo del dollaro
  • variabile shell => usa due simboli di dollaro

$$ è il PID del tuo processo corrente.

$ 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

Non direttamente applicabile a questo esempio -- tranne se il codice mostrato viene eseguito tramite $(shell ...) invece di essere una regola:

Con l'espansione secondaria abilitata, make potrebbe anche interpretare il double dollar stesso nella seconda fase di elaborazione, quando compare nell'elenco dei prerequisiti. (Prima fase:lettura del file, impostazione delle variabili; seconda fase:ricerca e richiamo degli obiettivi di dipendenza, esecuzione delle regole)

Viene utilizzato per consentire di specificare dinamicamente gli obiettivi di dipendenza, quando la variabile con il nome degli obiettivi è disponibile solo successivamente nel file.

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


Linux
  1. Script Bash(I)

  2. Capisci il significato di `$_`?

  3. Qual è il significato di POSIX?

  4. Qual è il significato di fork() e grep in Linux?

  5. Qual è la differenza tra #!/usr/bin/env bash e #!/usr/bin/bash?

Variabile di esportazione Bash

Cosa fa -e in un bash shebang?

qual è il significato di 1 alla fine dello script awk

Qual è il significato di curl -k -i -X ​​in Linux?

Cos'è la variabile d'ambiente XDG_VTNR?

Qual è la differenza tra $(CC) e $CC?