답변:
넌 선언 할 수도 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
메인테이너는, 이것이 감독이라고 말한다 그것은 다음 릴리스로 변경됩니다.
bash: f: readonly function
와 0이 아닌 상태 코드가 생성되지만 errexit
옵션이 활성화 된 경우 종료되지 않습니다 .
bash
하지 않지만 bash
메일 링리스트 중 하나에 요청할 것을 요청합니다 .
bash
경우에만 종료 set -e
POSIX 때 적용되는 요구 에 (그리고 readonly -f
POSIX되지 않습니다). Greg bash
는 함수 선언 errexit
이 종료를 트리거하는 이유로 "함수 선언 실패"를 언급하지 않는다고 지적합니다 (함수 선언이 복합 명령으로 계산되지 않으면 확실하지 않습니다). 스레드는 현재 진행 중입니다 : lists.gnu.org/archive/html/help-bash/2019-09/msg00039.html
errexit
또는 set -e
당신의 문제를.
typeset -r
:typeset -rf f
.