查找抛出路径必须位于脚本中的表达式之前

Qui*_*Par 5 linux bash shell grep find

我正在尝试别名查找和grep到一行,如下所示

alias f='find . -name $1 -type f -exec grep -i $2 '{}' \;'
Run Code Online (Sandbox Code Playgroud)

我打算把它作为

f *.php function
Run Code Online (Sandbox Code Playgroud)

但是当我将它添加到.bash_profile并运行它时,我被击中了

[a@a ~]$ f ss s
find: paths must precede expression
Usage: find [-H] [-L] [-P] [path...] [expression]
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

Pau*_*ce. 7

别名不接受位置参数.你需要使用一个函数.

f () { find . -name "$1" -type f -exec grep -i "$2" '{}' \; ; }
Run Code Online (Sandbox Code Playgroud)

你还需要引用你的一些论点.

f '*.php' function
Run Code Online (Sandbox Code Playgroud)

这推迟了glob的扩展,因此find执行它而不是shell.