Вы можете объявить 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сопровождающий, говорит, что это недосмотр и что он будет изменен в следующем выпуске.
typeset -r:typeset -rf f.