我在 StackOverflow 上的回答至少获得了两次赞成票,它在我以前工作场所使用的工作站的外壳上起作用。在那个可能是 SunOS 或 Red Hat Commercial Linux 或 Red Hat Enterprise Linux 的旧版本的工作站上,测试常规文件和可写目录的存在。, , ,并且是该工作站上唯一可能安装的 shell,我很可能在.[[ -fwd
path
]]
path
sh
bash
csh
tcsh
zsh
bash
我问这个问题是因为我现在无法在其他类 Unix 操作系统上重现它。它总是给我一个语法错误,所以我开始怀疑我是否成功地运行过它。
我的问题是:此代码在哪些系统上有效,如果是,这是错误还是功能?
不,那行不通。在任何版本的 bash 中都不是。
该测试适用于任何 bash 版本(实际上,适用于任何 shell):
但它测试的不是文件标志,而是测试字符串
-fwd
的长度是否为0。因为它有一些字符,所以测试是真的。使用
[[
更改允许的标志:在 bash 3.2 中给出上述错误。
3.2之后的bash版本没有报错,但结果是真实的:
这是不可能的:一个目录条目不能既是文件 (
-f
) 又是目录 (-d
)。这证实了测试实际上是在测试字符串的想法:
用文件测试
在 3.2 之后的 bash 版本上给出失败消息。
对于其他版本,它给出了真实的答案(这对于文件测试是不可能的,目录条目不能同时是文件和目录)。
比较这两个测试,似乎只使用了第一个字母:
可能在 bash 4 上更正了一个错误
也失败:
csh
[[: No match.
tcsh
[[: Command not found.
zsh
unknown condition: -fd
# 版本 5.4.2ksh
syntax error at line 3:
wds' 意外`# 版本 AJM 93u+ 2012-08-01