2011-10-12 52 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