-a 起什么作用以及它为什么存在?

-a 起什么作用以及它为什么存在?

我只想在 bash 中检查某个文件是否存在
这一页提到了两个可供使用的选项if

  • [ -a FILE ]- 如果文件存在则为真
  • [ -e FILE ]- 如果文件存在则为真

它们是等效的吗或者它们之间有什么区别?

答案1

-a 起什么作用以及它为什么存在?

-a选项与 相同-e,是为了与 Korn Shell 兼容,Bash 从 Korn Shell 中借用了很多功能。

来自 POSIX 标准,命令描述test关联):

早期提案使用了 KornShell -a 主运算符(含义相同),但后来将其更改为 -e,因为人们担心人们很容易将 -a 主运算符与 -a 二元运算符混淆。

边注:二进制表示出现在两个变量之间的标志[ $var1 -a $var2 ],主要表示首先出现在参数列表中,如[ -a $var ]

事实上,Korn Shell(ksh93此处)手册指出:

-一份文件

与下面的 -e 相同。此选项已过时。

test您引用的 TLDP 文章使用内置的 bash ,但是尽管文档中没有提供test该选项,但它也存在:/usr/bin/test

$ /usr/bin/test -a /etc/passwd  && echo 1                                   
1

如果功能相同,使用它是否好?

只要您 100% 确定您的脚本将在 Bash 或 Korn Shell 上使用 - 那么可以。但是,如果您追求脚本的可移植性并希望以正确的方式编写脚本则应使用-e。标准 Ubuntu shell,/bin/sh实际上是 Dash - Debian Amquist Shell - 不将其识别为有效选项:

$ dash
$ test -a /etc/passwd
dash: 1: test: -a: unexpected operator

如果您想将脚本移植到其他平台,使用也-a不能保证其安全性/usr/bin/test,您应该坚持使用,-e因为它实际上是由 POSIX 标准指定的。

相关内容