Bash检查显示不存在的文件存在文件?
在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),测试总是成功:
这可能是为了方便撰写: [ $variable_that_may_or_may_not_be_defined ] 如果添加引号,则传递2个参数,并且会发生更多理智: if [ -f "" ]; then (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |