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

Bash检查显示不存在的文件存在文件?

发布时间:2020-12-16 01:50:35 所属栏目:安全 来源:网络整理
导读:在bash中运行以下命令: stuff=`rpm -ql some package | grep dasdasdfd` (包中不存在的文件,退出代码= 1,标准输出为空) if [ -f $stuff ]; then echo "whaaat"; fi 上面的命令检查文件是否存在…但是: file $stuff 只需打印文件的使用信息……和 stat $stu
在bash中运行以下命令:

stuff=`rpm -ql <some package> | grep dasdasdfd`

(包中不存在的文件,退出代码= 1,标准输出为空)

if [ -f $stuff ]; then echo "whaaat"; fi

上面的命令检查文件是否存在…但是:

file $stuff

只需打印文件的使用信息……和

stat $stuff

缺少操作数……

有人可以解释一下原因吗?这是一个错误吗?难道我做错了什么?我只是想确保包中的文件出现在fs上

解决方法

你可能需要在引号中包含$stuff

if [ -f "$stuff" ]; then

作为一般规则,您几乎总是希望在使用它们的任何地方添加路径名周围的引号.

我觉得将shell脚本中的变量或变量视为“宏”更有用,它们在首次使用时会扩展为它们的值.这与几乎所有其他编程语言中的变量不同.

因此,如果$stuff包含hello world(注意空格),它就像你键入的一样:

[ -f hello world ]

这显然是一个错误.

在这种情况下,你提到你正在处理一个不存在的文件,所以$stuff实际上是空的,这就像打字:

[ -f ]

这实际上是有效的,但总是成功的.这是一个模糊的测试行为,从POSIX spec我们读到,如果只有一个参数(在这种情况下,参数是-f),测试总是成功:

1 argument:
Exit true (0) if $1 is not null; otherwise,exit false.

这可能是为了方便撰写:

[ $variable_that_may_or_may_not_be_defined ]

如果添加引号,则传递2个参数,并且会发生更多理智:

if [ -f "" ]; then

(编辑:李大同)

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

    推荐文章
      热点阅读