1

文件扩展名通常是最后一个句点之后的所有内容。如果文件名没有“.”,则它没有扩展名。当文件名以点开头时会发生什么,就像 linux 中的隐藏文件一样?

在python中,文件没有扩展名......

>>> os.path.splitext("base.ext")
('base', '.ext')
>>> os.path.splitext(".ext")                                                                                              
('.ext', '')

bash 中的常用方法会产生另一种结果,即只有扩展名而没有基本部分(在 Bash 中提取文件名和扩展名)......

>>> filename=".ext"
>>> extension="${filename##*.}"
>>> base="${filename%.*}"
>>> echo $base

>>> echo $extension
ext

代码应该如何处理这样的文件名?有标准吗?每个操作系统都不同吗?或者简单地说哪个是最常见/一致的?

[编辑]
假设您有一个只是“ .pdf”的文件。例如,一个打开的对话是否应该默认列出它而没有 1. 显示隐藏文件和 2. 允许所有文件扩展名?

  1. 这是一个隐藏文件 - 它以句点开头
  2. 它实际上是 .pdf (按照文件名约定,确定它有 pdf 数据)还是没有扩展名的文件?
4

1 回答 1

1

基于 POSIX 的操作系统中的文件扩展名没有固有的含义;他们只是一个约定。更改扩展名不会更改文件本身的任何内容,只会更改用于引用它的名称。

一个文件可以有多个扩展名:

source.tar.gz

有时一个扩展代表两个的收缩:

source.tgz

其他文件可能根本没有扩展名:

.bashrc
README
ABOUT
TODO

通常,定义扩展名的唯一内容是它是文件名的尾随组成部分,跟在非初始句点之后。含义由检查文件名的应用程序指定。PDF 阅读器可能会关注名称以 结尾的文件.pdf,但不应拒绝打开名称不以 . 结尾的有效 PDF 文件。

注意

extension="${filename##*.}"

只是参数扩展运算符的应用程序,如果文件名不以句点开头,则仅返回(最终)扩展名。它不是扩展运算符,而是前缀删除运算符。

于 2013-11-20T13:37:03.297 回答