2010-09-14 55 views
33

我試圖迫使使文件顯示下一個字符串:

"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" 

的轉義字符,引號的任意組合,"$(shell echo "沒有得到需要的結果......

有什麼建議?

回答

37

manual for GNU make,他們談論這個具體的例子說明value功能時:

價值功能爲您提供了使用 變量的值,而無需擴大它的方式。請注意,這不是 撤消已經發生的擴展;例如,如果您創建了 簡單擴展變量,則其值會在 定義期間展開;在這種情況下,值函數將直接返回與使用該變量相同的結果 。

價值函數的語法是:

$(value variable) 

注意,變量是變量的名稱;不是對該變量的引用。因此,寫作時通常不會使用 a'$'或括號。 (你可以,但是,如果你想要的名稱不是一個 經常使用的名稱 變量引用。)

此函數的結果是包含 變量的值的字符串,沒有出現任何擴大。例如,在此 生成文件:

FOO = $PATH 

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

第一輸出線將ATH,因爲「$ P」將作爲補充變量進行擴展,而第二 輸出線將是當前值的$ PATH環境變量 ,因爲值函數避免了擴展。

+0

感謝您指出變量聲明是在目標之外完成的。他們可以在目標內定義嗎? – Crt 2016-11-14 19:03:21

12

make使用$作爲自己的variable expansions。例如。單字符變量$A或具有長名稱的變量 - ${VAR}$(VAR)

爲了把$到命令,使用$$,例如:

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

還要注意make""''(雙人和單引號)不發揮任何作用,他們傳遞逐字地到殼。 (刪除@標誌以查看make發送到shell的內容。)爲防止shell擴展$PATH,第二行使用''

+0

謝謝你,你給了我方向! @echo「setenv PATH/usr/local/greenhills/mips5/linux86:$$ PATH」 case to whole $ PATH to be printed,but @echo'setenv PATH/usr/local/greenhills/mips5/linux86:$$ PATH '做這份工作! – BaruchLi 2010-09-14 09:44:31

+0

因爲我已經注意到''''''''''被傳遞給了shell。在''''shell裏面會擴展'$ PATH',但不在''''裏面。 – Dummy00001 2010-09-14 09:57:13

+0

感謝您的提醒,自從我使用 – 2010-09-14 10:03:32