2015-10-05 64 views
-1

下面是一個簡化的Makefile尚未公開,因爲我面臨同樣的問題:如何做的GNU shell變量替換使

all: 
     for i in *.pod; do g=${i%%.pod}; echo ${g};done 

我要的是獲取文件名沒有後綴。但是當我運行這個品牌時,我看到這個:

for i in *.pod; do g=; echo ;done 

在我看來,殼牌的美元替代品已被完全刪除。

這樣做的正確方法是什麼?

+0

你是否真的想回顯幾個沒有後綴的文件名,或者你想在shell命令中做一般的變量替換嗎? – Beta

+1

爲了避免將'$'解釋爲替代,你需要將它加倍'$$'。 – rici

回答

0

下面的模式替換應該足夠了(請確保使用選項卡):

SRC = $(wildcard *.pod) 
BIN = $(patsubst %.pod;,%,$(SRC)) 

all: 
     echo $(BIN) 
0

化妝擴展所有$(something)${something}發現,並與的價值代替他們做出變量something。因此,如果您想使用shell變量並防止make擴展它們,只需將$符號加倍(如果它受制於一個make擴展,否則您需要更多$符號)。在你的情況下:

all: 
    for i in *.pod; do g=$${i%%.pod}; echo $${g}; done 

應該工作。