我只想检查bash中是否存在某个文件。
在此页面上,提到了两个选项可与一起使用if
:
[ -a FILE ]
-如果FILE存在,则为True[ -e FILE ]
-如果FILE存在,则为True它们是等效的还是它们之间有区别?
该-a
选项与相同-e
,并且与Bash借用了许多功能的Korn Shell兼容。
根据POSIX标准,test
命令的描述(链接):
早期的建议使用KornShell -a primary(具有相同的含义),但由于有人担心-a primary与-a二进制运算符混淆的可能性很高,因此将其更改为-e。
旁注:二进制表示在两个变量之间出现的标志[ $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上使用-是的,没关系。但是,如果您为脚本的可移植性而努力,并且想以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] 删除。
我来说两句