zsh条件表达式中的-a和-e有什么区别?

时间:2019-04-17 16:49:24

标签: zsh

例如,我在zsh -a语句中查找类似if的标志的含义。

if [[ -a file.txt ]]; do
    # do something
fi

我发现了this

  

-一个文件

     

如果文件存在,则为真。

     

-e文件

     

如果文件存在,则为真。

-a-e有什么区别?如果没有,为什么它们都存在?

1 个答案:

答案 0 :(得分:3)

POSIX对此有所启发。

tl; dr:Ksh传统上使用-a,其他几个shell也随之而来。 POSIX取而代之的是从Csh借用-e以避免混淆。现在许多shell都支持。

  

添加了-e主类,它具有与C shell提供的功能相似的功能,因为它为shell脚本提供了唯一的方法来查找文件是否存在而无需尝试打开该文件。由于允许实现添加其他文件类型,因此可移植脚本不能使用:

test -b foo -o -c foo -o -d foo -o -f foo -o -p foo
     

找出foo是否是现有文件。在历史悠久的BSD系统上,文件的存在可以通过以下方式确定:

test -f foo -o -d foo
     

,但是没有简单的方法来确定现有文件是常规文件。早期的提案使用了KornShell -a主数据库(具有相同的含义),但由于有人担心-e主数据库与{ {1}}二进制运算符。