クエリ式の一部にエイリアスを追加するには?

クエリ式の一部にエイリアスを追加するには?

-regex私はシェルパターン構文よりも正規表現を好みます-name。私もposix-egrep型を使いたいので、次のようなことをしたいと思います。

alias find="find -regextype posix-egrep"

ただし、パスが式の前にある必要があるため、これはエラーです。ただし、-regextype式から最初に来る必要があります(または-regexorを使用する前に-iregex)。

find私は単に正常に動作し、orオプションをposix-regex使用することを決定するたびに使用できるようにエイリアスを指定するか、シェル機能を持​​ちたいと思います。-regex-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

関連情報