我有以下函数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
参数?
答案 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'