回答:
またはfを使用して読み取り専用関数として宣言できます(と同等です)。これらの組み込みユーティリティのオプションは、変数ではなく関数の名前として機能するようにします。readonly -f fdeclare -g -r -f freadonlydeclare -g -r-fff
$ 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メンテナーのChet は、これは見落としであり、次のリリースで変更されると言っています。
bash: f: readonly functionとゼロ以外のステータスコードが生成されますが、errexitオプションが有効な場合は終了しません。
bashはbashわかりませんが、メーリングリストのいずれかで確認してください。
bashのみ終了することを提案します。グレッグは、マニュアルでは出口をトリガーする理由として「関数宣言の失敗」に言及していないことを指摘しています(関数宣言が複合コマンドとしてカウントされている場合を除き、彼はそうではないと確信しています)。スレッドはここで継続中です。lists.gnu.org / archiveset -ereadonly -fbasherrexit
errexitまたはset -e質問で何も言わないことにも気付いています。
typeset -rですtypeset -rf f。