O atual manual do bash sobre matrizes diz
An array variable is considered set if a subscript has been assigned a value.
Então, IMHO, você teria que fazer algo diferente para matrizes associativas. Eu não posso dizer se esta é uma mudança recente no comportamento bash.
Outra maneira de definir is_var_set seria usar (ab) o declare
builtin , usando o seguinte:
The return status is zero unless ... one of the names is not a valid shell variable name ...
function is_var_set {
declare -p "${1:?"No var provided to 'is_var_set'! "}" >& /dev/null
}
O texto acima funcionaria para nomes de variáveis de nível superior, mas não para elementos de matriz específicos.