如何为查找表达式的一部分添加别名?

如何为查找表达式的一部分添加别名?

-regex与shell 模式语法相比,我更喜欢正则表达式-name。我也想使用该posix-egrep类型,所以我想做类似的事情

alias find="find -regextype posix-egrep"

但这是一个错误,因为路径必须位于表达式之前。但是,-regextype必须位于表达式的第一位(或在使用-regexor之前-iregex)。

我只是想别名或有一个 shell 函数find,以便它像平常一样工作,posix-regex只要我决定使用-regexor-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

相关内容