据说Bash文档(
http://www.gnu.org/software/bash/manual/bashref.html#Bash-Conditional-Expressions)中的“-a”和“-e”选项都是这样的:
-a file True if file exists. -e file True if file exists.
尝试得到什么区别是我运行以下脚本:
resin_dir=/Test/Resin_wheleph/Results if [ -e ${resin_dir} ] ; then echo "-e "; fi if [ ! -e ${resin_dir} ] ; then echo "! -e"; fi if [ -a ${resin_dir} ] ; then echo "-a"; fi if [ ! -a ${resin_dir} ] ; then echo "! -a"; fi
/ Test / Resin_wheleph / Results存在并且是一个目录。这就是我所得到的:
-e -a ! -a
这似乎有点奇怪(注意“-a”和“!-a”)。但是当我使用双括号(例如,如果[[-e $ {resin_dir}]])在类似的脚本中给出合理的输出:
-e -a
所以:
“-a”和“-e”选项有什么区别?
>为什么“-a”在单括号内使用时会产生奇怪的结果?
我研究过,这很毛茸茸:
原文链接:https://www.f2er.com/bash/388776.html-a已被弃用,因此不再在/ usr / bin / test的联机帮助页中列出,但仍在bash中。你看 。对于单个'[‘,bash内置函数与测试bash内置函数的行为相同,它与/ usr / bin / [和/ usr / bin / test(其中一个是另一个符号链接)的行为相同。注意-a的效果取决于它的位置:如果它在开始,这意味着文件存在。如果它在两个表达式的中间,这意味着逻辑和。
[! -a / path]&&回声存在不起作用,因为bash手册指出 – 这被认为是一个二进制运算符,所以上面没有被解析为否定-a ..但是如果’! ‘/ path’为真(非空)。因此,您的脚本总是输出“-a”(实际上是测试文件),而“!-a”其实是一个二进制文件。
对于[[,-a不再用作二进制文件(&&&&&&&&&&&&所以,否定实际上是你期望的。