./*/可移植吗?

ogu*_*ail 6 shell posix glob sh

我经常./*/在for循环中使用

for d in ./*/; do
  : # do something with dirs
done
Run Code Online (Sandbox Code Playgroud)

来匹配当前工作目录中的所有非隐藏目录,但是我不确定这是否是一种可移植的方法。我在我的系统上安装了bash,dash和ksh,并且可以与所有工具一起使用,但是由于POSIX规范没有提及任何内容(或者它隐含了内容,所以我错过了),我想我不能依靠它。我还检查了POSIX错误报告,但无济于事,也没有提及它。

它的行为实现或文件系统相关吗?我在这里想念什么吗?我怎么知道它是否便携?

das*_*h-o 6

简短答案:是

长答案:

POSIX标准(来自opengroup)规定/将仅与扩展文件名中的斜杠匹配。由于Unix / Linux不允许在文件名中使用/,因此我认为在Unix / Linux系统上这是一个安全的假设。

从下面的粗体文本来看,即使对于允许在文件名中包含/的系统,POSIX标准也要求/不会与该文件匹配。

在Windows上,文件名中似乎不允许/,但是我不是Windows的专家。

Shell编程语言§用于文件名扩展的模式

路径名中的斜杠字符应通过在模式中使用一个或多个斜杠来明确匹配;它既不能与星号或问号特殊字符匹配,也不能与括号表达式匹配。模式中的斜线应在方括号表达式之前标识;因此,用于文件名扩展的模式括号表达式中不能包含斜杠。...

附加说明-澄清路径名:

路径是在4.13定义,并明确提及路径与斜线基本概念§路径解析

包含至少一个非<slash>字符且以一个或多个尾随<slash>字符结尾的路径名,除非尾随<slash>字符之前的最后一个路径名组件命名现有目录或目录条目,否则不会成功解析解析路径名后立即为目录创建的目录。当未命名现有目录的路径名包含至少一个非<slash>字符并包含一个或多个尾随<slash>字符时,使用路径名解析的接口可能会指定其他约束。