加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash if -a vs -e选项

发布时间:2020-12-15 19:56:38 所属栏目:安全 来源:网络整理
导读:据说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/
据说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不再用作二进制文件(&&&&&&&&&&&&所以,否定实际上是你期望的。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读