我经常使用./*/
在 for 循环中
for d in ./*/; do
: # do something with dirs
done
匹配当前工作目录中的所有非隐藏目录,但我不确定这是否是一种可移植的方法。我的系统上安装了 bash、dash 和 ksh,并且它适用于所有系统,但是自从POSIX 规范 http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_06没有说任何关于它的事情(或者它隐含地说了,我错过了)我想我不能依赖它。我也检查过,但无济于事,那里也没有提及它。
它的行为实现或文件系统依赖吗?我在这里错过了什么吗?我怎么知道它是否是便携式的?
简短回答:是的
长答案:
POSIX 标准(来自 opengroup)指出/将仅匹配扩展文件名中的斜杠。由于 Unix/Linux 不允许/在文件名中,我相信这在 Unix/Linux 系统上是一个安全的假设。
从下面的粗体文本看来,即使对于允许的系统/在文件名中,POSIX 标准要求/将不会与此类文件匹配。
在 Windows 上,看起来像/文件名中不允许使用 ,但我不是 Windows 专家。
From Shell 编程语言 § 用于文件名扩展的模式 https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_13_03:
路径名中的斜杠字符应通过在模式中使用一个或多个斜杠来显式匹配;它既不能与星号或问号特殊字符匹配,也不能与方括号表达式匹配。模式中的斜杠应在括号表达式之前识别;因此,一个用于文件名扩展的模式括号表达式中不能包含斜杠.
...
附加说明 - 澄清路径名:
The pathname在 4.13 中定义,明确引用带有尾部斜杠的路径名一般概念 § 路径名解析 https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_13.
至少包含一个非 字符且以一个或多个尾随 字符结尾的路径名不得成功解析,除非尾随 字符之前的最后一个路径名组件指定现有目录或目录条目这是在解析路径名后立即为目录创建的。当未命名现有目录的路径名包含至少一个非 字符且包含一个或多个尾随 字符时,使用路径名解析的接口可以指定附加约束。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)