for file in *.pdf ; do
newname=${file%\\.\*}
done
我不明白如何%\.*
删除文件扩展名,有人可以引导我完成它吗?
答案1
我不明白如何
%\.*
删除文件扩展名
那是因为事实并非如此。 :) 编写的代码是错误的,并且它没有完成任何有用的事情。
有一个标准的 shell 扩展${variable%pattern}
,它接受$variable
并删除最短其末尾的块匹配pattern
(有一个类似的扩展${variable%%pattern}
,删除了最长匹配)。然而,pattern
应该是一个 shell glob,而上面这段代码的作者似乎打算将其作为正则表达式。
正确的形式是这样的:${file%.*}
.它的工作原理是删除右侧的所有内容最右边的点。相反,${file%%.*}
删除右侧的所有内容最左边点。例如, if file=/some/very.long.directory.name/foo.pdf
, then${file%.*}
扩展为/some/very.long.directory.name/foo
, 并${file%%.*}
扩展为/some/very
。