`if [-a FILE]`和`if [-e FILE]`之间有什么明显区别吗?

雨果

我只想检查bash中是否存在某个文件。
此页面上,提到了两个选项可与一起使用if

  • [ -a FILE ] -如果FILE存在,则为True
  • [ -e FILE ] -如果FILE存在,则为True

它们是等效的还是它们之间有区别?

塞尔吉(Sergiy Kolodyazhnyy)

-a做什么,为什么存在?

-a选项与相同-e,并且与Bash借用了许多功能的Korn Shell兼容。

根据POSIX标准,test命令的描述链接):

早期的建议使用KornShell -a primary(具有相同的含义),但由于有人担心-a primary与-a二进制运算符混淆的可能性很高,因此将其更改为-e。

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

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

-一份文件

与下面的-e相同。这已经过时了。

您引用testTLDP文章中使用命令使用bash内置test,但是/usr/bin/test尽管文档缺少该选项,但该选项也存在

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

如果功能相同,那么使用它是否是一个好主意?

只要您100%确信您的脚本将在Bash或Korn Shell上使用-是的,没关系。但是,如果您为脚本的可移植性而努力,并且想以Right Way TM编写脚本,则应使用-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标准指定的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

1和{print}之间有什么明显的区别?

来自分类Dev

set -e和set -o errexit之间有区别吗?

来自分类Dev

File :: Tee和打开“ tee”管道之间有什么区别吗?

来自分类Dev

$ @和“ $ @”之间有什么区别吗?

来自分类Dev

Activator.CreateInstance和使用表达式之间有明显的区别吗?

来自分类Dev

ISP的150Mbps和250Mbps之间有明显的区别吗?

来自分类Dev

“ file:///”和“ file://”之间的区别

来自分类Dev

“ file:///”和“ file://”之间的区别

来自分类Dev

\ e和^ [之间的区别

来自分类Dev

Java泛型:List <E>和List <?>之间有区别吗?

来自分类Dev

gnome-terminal的-e和-x选项之间有什么区别?

来自分类Dev

Cat 6和Cat 6e以太网电缆之间有什么区别?

来自分类Dev

正则表达式(T | E | N)*和[TEN] *之间有什么区别

来自分类Dev

事件和状态之间是否有任何明显的区别

来自分类Dev

通过 e.id=X 和 e.attr("id", X) 分配新 ID 之间有区别吗?

来自分类Dev

dataWithContentsOfURL(线程)和dataTaskWithURL之间有什么区别吗?

来自分类Dev

类型和类之间有什么区别吗?

来自分类Dev

== null和.equals(“ null”)之间有什么区别吗?

来自分类Dev

Activityname.this()和this之间有什么区别吗?

来自分类Dev

lambda函数中[=]和[&]之间有什么区别吗?

来自分类Dev

strlen和strlen之间有什么区别吗?

来自分类Dev

svg和png img之间有什么区别吗?

来自分类Dev

CassandraCSharpDriver和YugaByteCassandraCSharpDriver之间有什么区别吗?

来自分类Dev

Minikube和Kind之间有什么主要区别吗?

来自分类Dev

/ etc和/ private / etc之间有什么区别吗?

来自分类Dev

lambda函数中[=]和[&]之间有什么区别吗?

来自分类Dev

strlen和strlen之间有什么区别吗?

来自分类Dev

nvprof 和 pgprof 之间有什么区别吗?

来自分类Dev

e.keyCode和e。哪个有什么区别?

Related 相关文章

  1. 1

    1和{print}之间有什么明显的区别?

  2. 2

    set -e和set -o errexit之间有区别吗?

  3. 3

    File :: Tee和打开“ tee”管道之间有什么区别吗?

  4. 4

    $ @和“ $ @”之间有什么区别吗?

  5. 5

    Activator.CreateInstance和使用表达式之间有明显的区别吗?

  6. 6

    ISP的150Mbps和250Mbps之间有明显的区别吗?

  7. 7

    “ file:///”和“ file://”之间的区别

  8. 8

    “ file:///”和“ file://”之间的区别

  9. 9

    \ e和^ [之间的区别

  10. 10

    Java泛型:List <E>和List <?>之间有区别吗?

  11. 11

    gnome-terminal的-e和-x选项之间有什么区别?

  12. 12

    Cat 6和Cat 6e以太网电缆之间有什么区别?

  13. 13

    正则表达式(T | E | N)*和[TEN] *之间有什么区别

  14. 14

    事件和状态之间是否有任何明显的区别

  15. 15

    通过 e.id=X 和 e.attr("id", X) 分配新 ID 之间有区别吗?

  16. 16

    dataWithContentsOfURL(线程)和dataTaskWithURL之间有什么区别吗?

  17. 17

    类型和类之间有什么区别吗?

  18. 18

    == null和.equals(“ null”)之间有什么区别吗?

  19. 19

    Activityname.this()和this之间有什么区别吗?

  20. 20

    lambda函数中[=]和[&]之间有什么区别吗?

  21. 21

    strlen和strlen之间有什么区别吗?

  22. 22

    svg和png img之间有什么区别吗?

  23. 23

    CassandraCSharpDriver和YugaByteCassandraCSharpDriver之间有什么区别吗?

  24. 24

    Minikube和Kind之间有什么主要区别吗?

  25. 25

    / etc和/ private / etc之间有什么区别吗?

  26. 26

    lambda函数中[=]和[&]之间有什么区别吗?

  27. 27

    strlen和strlen之间有什么区别吗?

  28. 28

    nvprof 和 pgprof 之间有什么区别吗?

  29. 29

    e.keyCode和e。哪个有什么区别?

热门标签

归档