下面是一個簡化的Makefile尚未公開,因爲我面臨同樣的問題:如何做的GNU shell變量替換使
all:
for i in *.pod; do g=${i%%.pod}; echo ${g};done
我要的是獲取文件名沒有後綴。但是當我運行這個品牌時,我看到這個:
for i in *.pod; do g=; echo ;done
在我看來,殼牌的美元替代品已被完全刪除。
這樣做的正確方法是什麼?
下面是一個簡化的Makefile尚未公開,因爲我面臨同樣的問題:如何做的GNU shell變量替換使
all:
for i in *.pod; do g=${i%%.pod}; echo ${g};done
我要的是獲取文件名沒有後綴。但是當我運行這個品牌時,我看到這個:
for i in *.pod; do g=; echo ;done
在我看來,殼牌的美元替代品已被完全刪除。
這樣做的正確方法是什麼?
下面的模式替換應該足夠了(請確保使用選項卡):
SRC = $(wildcard *.pod)
BIN = $(patsubst %.pod;,%,$(SRC))
all:
echo $(BIN)
化妝擴展所有$(something)
和${something}
發現,並與的價值代替他們做出變量something
。因此,如果您想使用shell變量並防止make擴展它們,只需將$
符號加倍(如果它受制於一個make擴展,否則您需要更多$
符號)。在你的情況下:
all:
for i in *.pod; do g=$${i%%.pod}; echo $${g}; done
應該工作。
你是否真的想回顯幾個沒有後綴的文件名,或者你想在shell命令中做一般的變量替換嗎? – Beta
爲了避免將'$'解釋爲替代,你需要將它加倍'$$'。 – rici