[unix] bash 함수를 재정의하는 방법은 무엇입니까?

에서 bash쉘, 우리는 함수를 정의 할 수 있습니다 f와를

f(){ echo Hello; }

그런 다음 오류 또는 경고 메시지없이 다시 선언 / 재정의하십시오.

f(){ echo Bye; }

이런 식으로 함수가 재정의되는 것을 방지하는 방법이 있다고 생각합니다.



답변

넌 선언 할 수도 f이용한 읽기 전용 함수 readonly -f f또는 declare -g -r -f f( readonly동일하다 declare -g -r). 그것은이다 -f에 옵션이 내장 된 그들에 행동하게 유틸리티 f오히려 변수보다는, 함수의 이름으로 f.

$ f(){ echo Hello; }
$ readonly -f f
$ f(){ echo Bye; }
bash: f: readonly function
$ unset -f f
bash: unset: f: cannot unset: readonly function
$ f
Hello

보시다시피, 함수를 읽기 전용으로 설정하면 재정의를 방지 할뿐만 아니라 설정이 해제되지 않도록 (완전히 제거) 보호 할 수 있습니다.


현재 (현재 bash-5.0.11) 읽기 errexit옵션 함수를 수정하려고하면 쉘 옵션 ( set -e)을 사용하는 경우 쉘이 종료되지 않습니다 . 쳇의 bash메인테이너는, 이것이 감독이라고 말한다 그것은 다음 릴리스로 변경됩니다.


답변