Yanıtlar:
Sen ilan edebilir f
kullanarak salt okunur bir fonksiyonu olarak readonly -f f
veya declare -g -r -f f
( readonly
eşdeğerdir declare -g -r
). Bu var -f
seçeneği bu yerleşik onları hareket yapar kamu hizmetleri f
yerine değişkeni yerine bir fonksiyonun adı olarak 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
Gördüğünüz gibi, işlevi salt okunur yapmak yalnızca geçersiz kılmayı değil, aynı zamanda ayarlanmamasını da (tamamen kaldırılmış) korur.
Şu anda (itibarıyla bash-5.0.11
), salt okunur işlevini değiştirmeye çalışmak, errexit
shell seçeneği ( set -e
) kullanılıyorsa kabuğu sonlandırmaz . Chet bash
sürdürme, bu bir gözetim olduğunu söyler ve bir sonraki sürümü ile değiştirilecek.
bash: f: readonly function
ve sıfır olmayan durum kodu üretir , ancak errexit
seçenek etkinleştirilirse çıkmaz .
bash
, ancak bash
emin olmak için posta listelerinden birini isteyeceğim .
bash
yalnızca set -e
POSIX gerektirdiğinde (ve readonly -f
POSIX olmadığında) geçerli olduğunu belirtir . Greg, bash
el kitabının errexit
bir çıkışı tetiklemenin nedeni olarak "işlev bildirimindeki başarısızlıktan" asla bahsetmediğine dikkat çekiyor (bir işlev bildirimi bileşik komut olarak sayılmadığı sürece, emin olmadığından emin değil). Konu burada devam ediyor: lists.gnu.org/archive/html/help-bash/2019-09/msg00039.html
errexit
veya set -e
sorunuz hakkında hiçbir şey söylemediğinizi de fark ediyorum .
typeset -r
:typeset -rf f
.