gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 09:16:52 25 4
gpt4 key购买 nike

在 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 的一些模糊的 test 行为我们读到如果只有一个参数(在本例中,参数是 -f),test 总是成功:

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

关于Bash 检查显示文件存在于不存在的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29303669/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com