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

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

많은 경우 다른 프로그램과 동일한 이름을 가진 함수를 만들어야 하는데 이것이 bash 스크립팅을 사용하는 좋은 방법인지 잘 모르겠습니다.

예:

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

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

답변1

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

여기에서 사용하는 것은 그렇지 않은 경우 우선순위를 갖는 함수 대신 명령(여기에 내장되어 있음)을 command요청하는 것을 의미합니다 .echo

그리고 여기서도 내장 기능이 있으므로( 내장 기능이 파일 시스템 명령보다 우선하므로 BTW echo에서는 조회되지 않음 ) 다음을 수행할 수도 있습니다.$PATH

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

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

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

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

셸 구문( for, if...)의 별칭과 키워드는 인용되지 않은 경우 해당 항목보다 먼저 고려됩니다.

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

관련 정보