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
答案2
查看 AlmaLinux 8.7 安装:
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)
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 已经指出的那样,需要进行研究来确定哪种选择具有最好的兼容性。