我对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严格兼容,否则应该使用).
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。