Answers:
您可以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),试图如果是使用修改只读功能不会终止Shell errexit外壳选项(set -e)。bash维护者Chet 说,这是一个疏忽,它将在下一版本中进行更改。
bash: f: readonly function和非零状态代码,但是如果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。