bash if -a vs -e选项

前端之家收集整理的这篇文章主要介绍了bash if -a vs -e选项前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
据说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”在单括号内使用时会产生奇怪的结果?

我研究过,这很毛茸茸:

-a已被弃用,因此不再在/ usr / bin / test的联机帮助页中列出,但仍在bash中。你看 。对于单个'[‘,bash内置函数与测试bash内置函数的行为相同,它与/ usr / bin / [和/ usr / bin / test(其中一个是另一个符号链接)的行为相同。注意-a的效果取决于它的位置:如果它在开始,这意味着文件存在。如果它在两个表达式的中间,这意味着逻辑和。

[! -a / path]&&回声存在不起作用,因为bash手册指出 – 这被认为是一个二进制运算符,所以上面没有被解析为否定-a ..但是如果’! ‘/ path’为真(非空)。因此,您的脚本总是输出“-a”(实际上是测试文件),而“!-a”其实是一个二进制文件

对于[[,-a不再用作二进制文件(&&&&&&&&&&&&所以,否定实际上是你期望的。

原文链接:https://www.f2er.com/bash/388776.html

猜你在找的Bash相关文章