Puede declarar f
como una función de solo lectura usando readonly -f f
o declare -g -r -f f
( readonly
es equivalente a declare -g -r
). Es la -f
opción de estas utilidades integradas lo que hace que actúen f
como el nombre de una función, en lugar de sobre la variable 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
Como puede ver, hacer que la función de solo lectura no solo la proteja de ser anulada, sino que también la protege de ser desarmada (eliminada por completo).
Actualmente (a partir de bash-5.0.11
), intentar modificar una función de solo lectura no terminaría el shell si se usa la errexit
opción de shell ( set -e
). Chet, el bash
mantenedor, dice que esto es un descuido y que se cambiará con la próxima versión.
typeset -r
:typeset -rf f
.readonly -f f