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

bash:文件测试表达式评估中的双重vs单括号

发布时间:2020-12-16 01:37:02 所属栏目:安全 来源:网络整理
导读:我对bash中的文件测试表达式有疑问.这是一个简单的脚本来说明我的问题: set -xread -p "Enter a filename: " var1if [ - e $var1 ]then echo file existselse echo file not foundfi 有三种情况: 在提示符下,我输入foo,这是一个存在于我运行脚本的目录中的
我对bash中的文件测试表达式有疑问.这是一个简单的脚本来说明我的问题:
set -x
read -p "Enter a filename: " var1
if [ - e $var1 ]
then
    echo file exists
else
    echo file not found
fi

有三种情况:

>在提示符下,我输入foo,这是一个存在于我运行脚本的目录中的文件.正如预期的那样,输出文件存在.
>在提示符下,我输入bar.我正在运行脚本的目录中不存在此类文件.正如预期的那样,输出文件未找到.
>在提示符下,我点击< enter>没有打字.令人惊讶的是,输出文件存在.

如果我使用if [[-e $var1]],即双括号而不是单一,则行为是正确的:即使在第三种情况下,我也找不到文件.

我在文件的顶部插入了一个-x,以查看发生了什么.使用单括号,变量的计算结果为:'[‘ – e’]’.使用double时,它被评估为[[-e”]].这是有趣的.为什么在这两种情况下表达式的评估方式不同?

我将很感激解释.对不起,如果我错过了明显的.谢谢!

因为这就是他们的工作方式. [[比测试更聪明,除非需要与sh严格兼容,否则应该使用).

(编辑:李大同)

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

    推荐文章
      热点阅读