2011-10-12 53 views
2
#!/bin/bash 
FILES=src/*.erl 
shopt -s nullglob 
for f in $FILES 
do 
    echo "Processing $f file..." 
# ??? 
done 

如何從完整路徑中提取文件名?它是什麼意思 - 「pathfilename = $ {f%。*}」?從完整文件名提取文件名

+1

你'禁用了javascript -s nullglob'應放在* *之前,您使用的glob'*'..它是沒有必要的文件的水珠列表保存到一個變量,然後使用該變量在循環。你可以簡單地(並且更高效地)在src/*。erl中使用'for f' –

回答

5

我只是複製幫助輸出,因爲它有示例和一切。

~$ basename --help 
Usage: basename NAME [SUFFIX] 
    or: basename OPTION 
Print NAME with any leading directory components removed. 
If specified, also remove a trailing SUFFIX. 

     --help  display this help and exit 
     --version output version information and exit 

Examples: 
    basename /usr/bin/sort  Output "sort". 
    basename include/stdio.h .h Output "stdio". 
2

更新:我已經刪除了我對第一部分的答案,因爲顯然我誤解了被問到的內容。

你提到,pathfilename=${f%.*}的語法,意味着pathfilename設置爲$f從字符串的結尾去掉最短的匹配.*值。這將從文件名剝離擴展名。該bash manual describes this syntax as follows

$ {參數%字}

$ {參數%%詞}

刪除匹配後綴模式。這個詞被擴展爲產生一個模式,就像路徑名擴展一樣。如果模式與參數擴展值的尾部相匹配,則擴展結果是具有最短匹配模式(「%」情況)或最長匹配模式(「%%」情況)已刪除。如果參數是@或*,則模式刪除操作將依次應用於每個位置參數,並且擴展是結果列表。如果參數是以@或*爲下標的數組變量,則將模式刪除操作依次應用於數組的每個成員,並且擴展是結果列表。

+0

10x,用於有用鏈接 – Yola