例如,我在zsh -a
语句中查找类似if
的标志的含义。
if [[ -a file.txt ]]; do
# do something
fi
我发现了this
-一个文件
如果文件存在,则为真。
-e文件
如果文件存在,则为真。
-a
和-e
有什么区别?如果没有,为什么它们都存在?
答案 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}}二进制运算符。