bash 中“[ -h” 和 “[ -L” 有什么区别?

bash 中“[ -h” 和 “[ -L” 有什么区别?
if [ -h "demo" ]; then
    echo "-h: true"
fi
if [ -L "demo" ]; then
    echo "-L: true"
fi

我发现“-h”和“-L”都可以用来判断指定文件是否为链接,它们之间有什么区别?

答案1

bash 中的“-h”和“-L”有什么区别?

由于遗留原因,它们都存在,以便与不同版本的 Unix 兼容。

如果您运行的系统不符合最新标准,则可能会缺少其中一个。

两种形式都存在于单一 Unix 规范版本 3/POSIX 2004,没有任何警告。

Solaris 的一些版本test仅支持-h,和(2003 年)一些软件已经切换到-h出于兼容性原因。

所以最好使用-h

来源:test -h 和 test -L 之间的区别,回答者布莱恩·坎贝尔

答案2

查看 AlmaLinux 8.7 安装:

  1. man test表示两个选项相同:
        -h FILE
               FILE exists and is a symbolic link (same as -L)
    <snip>
        -L FILE
               FILE exists and is a symbolic link (same as -h)
    
  2. man bash仅报告两个选项的相同帮助文本,而没有提及它们是相同的:
        -h file
               True if file exists and is a symbolic link.
     <snip>
        -L file
               True if file exists and is a symbolic link.
    

从上面的手册文本中,不清楚哪一个与其他发行版具有最佳兼容性。

正如@DavidPostill 已经指出的那样,需要进行研究来确定哪种选择具有最好的兼容性。

相关内容