Подтвердить что ты не робот

В чем смысл знака двойного доллара в bash/Makefile?

При вставке оболочки script внутри Makefile мы имеем (?), чтобы использовать знак двойного доллара ($$), чтобы ссылаться на переменные. Почему это так?

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

Ответ 1

По gnu сделать официальный документ:

Переменные и ссылки функций в рецептах имеют одинаковый синтаксис и семантика к ссылкам в другом месте в файле makefile. Они также имеют те же правила цитирования: если вы хотите, чтобы в вашем рецепт, вы должны удвоить его ('$$). Для оболочек, таких как оболочка по умолчанию, которые используют знаки доллара для введения переменных, важно сохранить ясно, что переменная, которую вы хотите использовать, - это сделать переменную (использовать один знак доллара) или переменную оболочки (использовать две долларовые знаки).

Короче говоря:

  • makefile variable = > использовать один знак доллара
  • shell variable = > использовать два знака доллара

Ответ 2

При включенном вторичном расширении make может также интерпретировать сам двойной доллар на втором этапе обработки. (Первая фаза: чтение файла, установка переменных; вторая фаза: поиск и вызов целей зависимости, выполнение правил)

Это позволяет динамически указывать цели зависимостей, когда переменная с именем цели доступна только позже в файле.

См. Https://www.gnu.org/software/make/manual/html_node/Secondary-Expansion.html.