#!/bin/bash
FILES=src/*.erl
shopt -s nullglob
for f in $FILES
do
echo "Processing $f file..."
# ???
done
如何从完整路径中提取文件名?它是什么意思 - “pathfilename = $ {f%。*}”?从完整文件名提取文件名
#!/bin/bash
FILES=src/*.erl
shopt -s nullglob
for f in $FILES
do
echo "Processing $f file..."
# ???
done
如何从完整路径中提取文件名?它是什么意思 - “pathfilename = $ {f%。*}”?从完整文件名提取文件名
我只是复制帮助输出,因为它有示例和一切。
~$ 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".
更新:我已经删除了我对第一部分的答案,因为显然我误解了被问到的内容。
你提到,pathfilename=${f%.*}
的语法,意味着pathfilename
设置为$f
从字符串的结尾去掉最短的匹配.*
值。这将从文件名剥离扩展名。该bash manual describes this syntax as follows:
$ {参数%字}
$ {参数%%词}
删除匹配后缀模式。这个词被扩展为产生一个模式,就像路径名扩展一样。如果模式与参数扩展值的尾部相匹配,则扩展结果是具有最短匹配模式(“%”情况)或最长匹配模式(“%%”情况)已删除。如果参数是@或*,则模式删除操作将依次应用于每个位置参数,并且扩展是结果列表。如果参数是以@或*为下标的数组变量,则将模式删除操作依次应用于数组的每个成员,并且扩展是结果列表。
10x,用于有用链接 – Yola
你'禁用了javascript -s nullglob'应放在* *之前,您使用的glob'*'..它是没有必要的文件的水珠列表保存到一个变量,然后使用该变量在循环。你可以简单地(并且更高效地)在src/*。erl中使用'for f' –