我运行了以下命令: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"
。