从完整文件名中提取文件名

时间:2011-10-12 09:54:03

标签: bash shell

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

如何从完整路径中提取文件名?它是什么意思 - “pathfilename = $ {f%。*}”?

2 个答案:

答案 0 :(得分: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".

答案 1 :(得分:2)

更新:我已经删除了我对第一部分的回答,因为显然我误解了被问到的内容。

您提到的语法pathfilename=${f%.*}表示pathfilename设置为$f的值,其中.*的最短匹配项从字符串末尾删除。这将从文件名中删除扩展名。 bash manual describes this syntax as follows

  

$ {参数%字}

     

$ {参数%%字}

     

删除匹配的后缀模式。这个词被扩展为产生一个模式,就像路径名扩展一样。如果模式匹配参数展开值的尾部,那么展开的结果是具有最短匹配模式(“%”情况)或最长匹配模式(“%%”情况)的参数的扩展值)删除。如果参数是@或*,则模式删除操作依次应用于每个位置参数,并且扩展是结果列表。如果参数是使用@或*下标的数组变量,则模式删除操作依次应用于数组的每个成员,并且扩展是结果列表。