GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Was bedeutet ein doppeltes Dollarzeichen in Bash/Makefile?

Gemäß GNU Make Official Doc:

Variablen- und Funktionsreferenzen in Rezepten haben dieselbe Syntax und Semantik wie Referenzen an anderer Stelle im Makefile. Sie haben auch die gleichen Zitierregeln:Wenn Sie möchten, dass ein Dollarzeichen in Ihrem Rezept erscheint, müssen Sie es verdoppeln („$$“). Bei Shells wie der Standard-Shell, die Dollarzeichen verwenden, um Variablen einzuführen, ist es wichtig, sich klar zu machen, ob die Variable, auf die Sie verweisen möchten, eine make-Variable (verwenden Sie ein einzelnes Dollarzeichen) oder eine Shell-Variable (verwenden Sie zwei Dollarzeichen) ist /P>

Also kurz:

  • Makefile-Variable => ein einzelnes Dollarzeichen verwenden
  • Shell-Variable => zwei Dollarzeichen verwenden

$$ ist die PID Ihres aktuellen Prozesses.

$ 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

Auf dieses Beispiel nicht direkt anwendbar -- außer wenn der gezeigte Code über $(shell ...) ausgeführt wird anstatt eine Regel zu sein:

Wenn die sekundäre Erweiterung aktiviert ist, interpretiert make möglicherweise auch den doppelten Dollar selbst in der zweiten Verarbeitungsphase, wenn er in der Liste der Voraussetzungen vorkommt. (Erste Phase:Datei lesen, Variablen setzen; zweite Phase:Abhängigkeitsziele finden und aufrufen, Regeln ausführen)

Dies wird verwendet, um die dynamische Angabe von Abhängigkeitszielen zu ermöglichen, wenn die Variable mit dem Zielnamen erst später in der Datei verfügbar ist.

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


Linux
  1. Bash-Scripting(I)

  2. Was sind die Worttrennzeichen von Readline?

  3. Verstehen Sie die Bedeutung von `$_`?

  4. Was bedeutet POSIX?

  5. Was ist der Unterschied zwischen #!/usr/bin/env bash und #!/usr/bin/bash?

Bash-Exportvariable

Was bedeuten fork() und grep unter Linux?

Was bedeutet „auf der schwarzen Liste“ bei GStreamer?

Was ist das Äquivalent von Bashs cat -n in PowerShell?

Was macht das -e in einem Bash-Shebang?

Was ist der Unterschied zwischen $(CC) und $CC?