GNU/Linux >> Znalost Linux >  >> Linux

Co znamená dvojitý znak dolaru v bash/Makefile?

Podle gnu vytvořte oficiální dokument:

Odkazy na proměnné a funkce v receptech mají stejnou syntaxi a sémantiku jako odkazy jinde v makefile. Mají také stejná pravidla pro citování:pokud chcete, aby se ve vašem receptu objevil znak dolaru, musíte jej zdvojnásobit („$$“). U shellů, jako je výchozí shell, který k zavádění proměnných používá znaky dolaru, je důležité mít v mysli jasno, zda proměnná, na kterou chcete odkazovat, je proměnná amake (použijte jeden znak dolaru) nebo proměnná shellu (použijte znaky dvoudolarů).

Takže ve zkratce:

  • proměnná makefile => použijte jeden znak dolaru
  • proměnná shellu => použijte dva znaky dolaru

$$ je PID vašeho aktuálního procesu.

$ 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

Na tento příklad se přímo nevztahuje – kromě případů, kdy je zobrazený kód spuštěn prostřednictvím $(shell ...) místo toho, aby to bylo pravidlo:

S povolenou sekundární expanzí může make také interpretovat samotný dvojitý dolar ve druhé fázi zpracování, když se objeví v seznamu požadavků. (První fáze:čtení souboru, nastavení proměnných; druhá fáze:nalezení a vyvolání cílů závislosti, spuštění pravidel)

To se používá k umožnění dynamického zadávání cílů závislosti, když je proměnná s názvem cílů k dispozici až později v souboru.

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


Linux
  1. Chápete význam `$_`?

  2. Co znamená POSIX?

  3. Jaký je rozdíl mezi #!/usr/bin/env bash a #!/usr/bin/bash?

  1. Jaké je použití $# v Bash

  2. Co má příkaz export dělat v Linuxu?

  3. Jaký je význam curl -k -i -X ​​v Linuxu?

  1. Bash skriptování (I)

  2. Co jsou oddělovače slov Readline?

  3. Jaký je rozdíl mezi $(CC) a $CC?