将glob结果传递给一个函数,丢弃除第一个文件之外的所有文件

时间:2016-04-21 20:17:14

标签: bash

我有以下函数f() { find . -name "$1"},它只是查找带有名称的文件的便捷快捷方式。如果我在终端中执行find . -name "*.gradle",我会得到:

./.gradle
./app/build.gradle
./build.gradle
./dependencies.gradle
./settings.gradle
./wearable/build.gradle

如果我在终端中执行f *.gradle,我会得到:

./app/build.gradle
./build.gradle
./wearable/build.gradle

第一个结果是正确的结果,也是想要的结果。为什么我会遇到这个错误的'即使内容相同,使用我的功能时的结果?我是否错误地注入了$1参数?

2 个答案:

答案 0 :(得分:4)

您需要使用引号来预防当前shell中的扩展,并让扩展在函数中进行:

f '*.gradle'

答案 1 :(得分:2)

f *.gradle

展开glob,将*.gradle替换为当前目录中的文件列表,然后可以运行如下所示的文件:

$ f one.gradle two.gradle
#   $1         $2

然后运行:

find . -name one.gradle

...仅传递第一个文件($1),忽略所有其他文件。

如果你想传递glob来查找:

f '*.gradle'