조회 표현식의 일부에 별칭을 추가하는 방법은 무엇입니까?

조회 표현식의 일부에 별칭을 추가하는 방법은 무엇입니까?

-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.

관련 정보