用于删除扩展的 Shell 变量的百分号

用于删除扩展的 Shell 变量的百分号
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

相关内容