为什么 find 返回 diff

为什么 find 返回 diff

我运行了以下命令:ff 'hac-launcher*

[root@foo log]# ff 'hac-launcher*'
./configserver/hac-launcher.log
./odb/hac-launcher.log
.
.

[root@foo log]# type ff
ff is a function
ff ()
{
    find . -type f -name $1 -print
}

However, if I try the same command right in the shell's command line, I get different results.
[root@btpvm0913 log]# find . -type f -name 'hac-launcher*' -print
./configserver/hac-launcher.log
./odb/hac-launcher.log.4
./odb/hac-launcher.log.3
./odb/hac-launcher.log.2
./odb/hac-launcher.log.1
./odb/hac-launcher.log

当我在 shell 提示符下直接运行命令时,我会获得更多匹配的文件,而在 shell 函数中使用相同的 filespec/regex 时,匹配的文件较少。

如何确保函数调用和内联命令执行都带来相同的结果?

答案1

你的功能没有引用变量$1,因此 shell 对替换的值执行通配符扩展。因此,它运行的实际命令是

find . -type f -name hac-launcher.log -print

…基于当前目录中的文件。(如果当前目录中有多个匹配的文件,则会导致 find 语法错误。)

要不改变地传递变量的值,请使用"$1"

相关内容