So this behavior of `bash`s seems like a bug to me. I stumbled across it by accident.
>From within a stack of x3 functions called from a case within a for loop, when trying to assign a value to a read-only variable, `printf` and `read` both fail with exit codes of 1, and the functions, `case` and `for` commands all complete. When trying effectively the same thing with a simple assignment syntax, `x=z`, when the assignment fails, the functions return, `case` fails to complete and `for` returns an exit code of 1. It's probably a pretty rare use case, though. I tried this out on Android 12 on a Nokia in Termux and Fedora 38 on an HP in XFCE; that's all I've got for the time being. There isn't any pressing need to look into this one; I'm just curious. A reproducer's attached. Thanks & Happy summer, Wiley ### $ cat ro-var-in-fn.sh #!/bin/bash -x reset readonly x=y declare -p x SHELLOPTS BASHOPTS : "hyphen: $-" a(){ : go a; b $1; : end a;} b(){ : go b; c $1; : end b;} c(){ : go c declare -p x case "$1" in 1 ) false : "exit, false: $?" ;; 2 ) printf -v x '%s' $1 : "exit, printf: $?" ;; 3 ) read -r x <<< $1 : "exit, read: $?" ;; 4 ) x=$1 : "exit, var assignment: $?" ;; 5 ) echo $1 ;; esac : "exit, case: $?" : end c } declare -pf a b c for ii in {1..5} do a $ii : "exit, a $ii: $?" done : "exit, for loop: $?" ###