bash 条件表达式中的“-h”和“-L”有什么区别?

bash 条件表达式中的“-h”和“-L”有什么区别?

根据手册页:

       -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? */

相关内容