프로그램 이름을 사용하기 위해 bash 함수를 정의할 때 무엇을 알아야 합니까?

프로그램 이름을 사용하기 위해 bash 함수를 정의할 때 무엇을 알아야 합니까?

다른 프로그램과 같은 이름의 함수를 만들어야 하는 경우가 많은데, 이것이 bash 스크립트를 사용하는 좋은 방법인지 모르겠습니다.

예:

    function echo () {
        echo -n "$@" ;
    }  

테스트 후에는 bin 경로 앞의 스크립트 내부에서 함수 이름을 확인하는 것처럼 보입니다. 나는 이것과 내가 알아야 할 다른 정보를 확인하고 싶습니다.

답변1

echo() {
  command echo -n "$@"
}

여기서 사용한다는 것은 함수가 아닌 명령(내장됨)을 command요청한다는 의미입니다 . 그렇지 않으면 명령이 우선 적용됩니다.echo

이것은 또한 내장 명령이기 때문에(그런데 내장 명령이 파일 시스템 명령보다 우선하기 때문에 echo검색되지 않습니다 ) 다음과 같이 수행할 수도 있습니다.$PATH

echo() {
  builtin echo -n "$@"
}

후자의 접근 zsh방식 이 command echo실행되는 것이 바람직합니다 /bin/echo(시뮬레이션 제외 sh).

쉘 간에는 약간의 미묘한 차이가 있지만 일반적으로 우선순위는 다음과 같습니다.

  1. 특수 내장 기능
  2. 기능
  3. 내장 기능
  4. 명령 $PATH(그리고 순서는 내장 명령에 의해 관리되는 테이블 안과 내부의 순서에 따라 달라집니다 $PATH)hashhash

셸 구문의 별칭과 키워드( for, if...)는 인용되지 않은 경우 앞에 오는 것으로 처리됩니다.

일부 쉘에서는 1또는 와 같이 및 의 순서가 반대입니다. 함수로 호출할 때 특수 내장 함수와 동일한 이름의 함수를 정의하는 것은 허용되지 않습니다.2bashzshbashsh

관련 정보