根据手册页:
-h file
True if file exists and is a symbolic link.
...
-L file
True if file exists and is a symbolic link.
他们似乎说的是完全相同的事情,但是为什么有两个单独的标志呢?是历史兼容性的原因吗? bash 版本之间有一些细微的差别吗?还有别的事吗?
答案1
没有任何区别。 POSIX 描述两个选项的读作
如果路径名解析为符号链接的现有目录条目,则为 True。如果路径名无法解析,或者路径名解析为不是符号链接的文件的现有目录条目,则返回 False。如果路径名的最后一个组成部分是符号链接,则不遵循该符号链接。
正如您所说,同时拥有两者的原因很可能支持test
和[
实用程序的历史实现所做出的最常见选择。
至于test
和 的[
内置实用程序bash
,它们的功能相同,并且一直都是这样做的。当前 Git 存储库中最旧的可用bash
源具有相同的措辞(版本 2.04,从1991年开始)。
1991年实际执行中,甚至还有评论:
case 'L': /* Same as -h */
case 'h': /* File is a symbolic link? */