2015-02-09 52 views
-1

我試圖獲得ls的路徑只是爲了使用makefile進行測試。我做了以下內容:Makefile中的通配符函數輸出

paths = $(addsuffix /ls,$(subst :, ,$(PATH))) 
repath = $(wildcard $(paths)) 
result = $(firstword $(repath)) 

all : ; @echo "the repath contains $(repath)" 
    @echo "the result contains $(result)" 

通配符功能只返回/bin/ls。這正是我想要的,但我堅持瞭解通配符輸出。

PATH(這裏分多條線路上的可讀性)包含以下冒號分隔的目錄:

/usr/local/cuda-6.0/bin 
/usr/local/cuda-6.0/bin 
/usr/lib64/qt-3.3/bin 
/usr/local/bin 
/usr/bin 
/bin 
/usr/local/sbin 
/usr/sbin 
/sbin 
/home/betatest/bin 

和後綴添加後它將是:

/usr/local/cuda-6.0/bin/ls 
/usr/local/cuda-6.0/bin/ls 
/usr/lib64/qt-3.3/bin/ls 
/usr/local/bin/ls 
/usr/bin/ls 
/bin/ls 
/usr/local/sbin/ls 
/usr/sbin/ls 
/sbin/ls 
/home/betatest/bin/ls 

那麼爲什麼通配符函數的輸出只有/bin/ls

回答

3

wildcard函數給出了存在並匹配給定模式的事物的列表。在這種情況下,給定的模式是

/usr/local/cuda-6.0/bin/ls /usr/local/cuda-6.0/bin/ls /usr/lib64/qt-3.3/bin/ls /usr/local/bin/ls /usr/bin/ls /bin/ls /usr/local/sbin/ls /usr/sbin/ls /sbin/ls /home/betatest/bin/ls 

我懷疑是實際存在的這些文件的只有一個是/bin/ls,所以這就是結果。

+0

Not path,但repath包含的值表示ls(ls命令二進制文件)在系統上可用。但我想知道通配符函數如何給它。 – 2015-02-09 08:06:05

+0

這個答案很清楚地解釋了,不是嗎? – tripleee 2015-02-09 08:36:07

+0

@tripleee先生!我喜歡通配符函數的工作方式。我所看到的是;它與shell腳本類似:
ls | grep
我是否正在從軌道走向正義或逃走。 – 2015-02-09 08:44:03