-regex
与shell 模式语法相比,我更喜欢正则表达式-name
。我也想使用该posix-egrep
类型,所以我想做类似的事情
alias find="find -regextype posix-egrep"
但这是一个错误,因为路径必须位于表达式之前。但是,-regextype
必须位于表达式的第一位(或在使用-regex
or之前-iregex
)。
我只是想别名或有一个 shell 函数find
,以便它像平常一样工作,posix-regex
只要我决定使用-regex
or-iregex
选项就可以使用。
我怎样才能做到这一点?
答案1
由于find
参数是位置性的,因此函数将是更好的解决方案。
find(){
command find "$1" -regextype posix-egrep "${@:2}"
}
因为您想“覆盖”原始命令,所以您需要使用完整路径,find
以便您的新函数不会创建调用自身的无限循环。
通过使用函数而不是别名,我们可以使用位置参数变量 ( $1-$n
)。因为您可能还想在末尾添加其他内容,所以find
我们附加命令,${@:2}
使用数组切片附加除第一个参数(您的路径)之外的所有内容。
答案2
你可以这样做:
efind() (
found=false
for arg do
if [ "$arg" = -regex ] && ! "$found"; then
set -- "$@" -regextype posix-egrep
found=true
fi
set -- "$@" "$arg"
shift
done
exec find "$@"
)
-regex-type posix-egrep
在第一次出现 之前插入-regex
。