Сделать эхо-файл, отображающий строку "$ PATH" - PullRequest
41 голосов
/ 14 сентября 2010

Я пытаюсь заставить make file отображать следующую строку:

"Please execute next commands:
setenv PATH /usr/local/greenhills/mips5/linux86:$PATH"

Проблема с "$PATH". Команда

@echo "setenv PATH /usr/local/greenhills/mips5/linux86:$PATH"

вызвать результат

"setenv PATH /usr/local/greenhills/mips5/linux86:ATH"

любые комбинации escape-символов, кавычек, "$(shell echo " не дали необходимых результатов ...

Есть предложения?

Ответы [ 2 ]

49 голосов
/ 24 августа 2012

В руководстве для GNU make они описывают этот конкретный пример при описании функции value:

Функция значения позволяет вам использоватьзначение переменной без ее расширения.Обратите внимание, что это не отменяет расширения, которые уже произошли;например, если вы создаете просто расширенную переменную, ее значение раскрывается во время определения;в этом случае функция значения будет возвращать тот же результат, что и непосредственное использование переменной.

Синтаксис функции значения:

 $(value variable)

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

Результатом этой функции является строка, содержащая значение переменной, без какого-либо расширения.Например, в этом make-файле:

 FOO = $PATH

 all:
         @echo $(FOO)
         @echo $(value FOO)

Первая строка вывода будет ATH, поскольку «$ P» будет расширена как переменная make, а вторая строка вывода будет текущим значением вашегоПеременная среды $ PATH, так как функция значения избегала расширения.

18 голосов
/ 14 сентября 2010

make использует $ для своих собственных расширений переменных . Например. односимвольная переменная $A или переменная с длинным именем - ${VAR} и $(VAR).

Чтобы ввести $ в команду, используйте $$, например:

all:
  @echo "Please execute next commands:"
  @echo 'setenv PATH /usr/local/greenhills/mips5/linux86:$$PATH'

Также обратите внимание, что make "" и '' (двойные и одинарные кавычки) не играют никакой роли, и они дословно передаются в оболочку. (Удалите знак @, чтобы увидеть, что make отправляет в оболочку.) Чтобы предотвратить расширение оболочки $PATH, во второй строке используется ''.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...