There is a post on stackoverflow: http://stackoverflow.com/questions/43117707/bashs-strange-behavior-on-a-function-named/
The *problem*: bash-4.4# shopt -s extglob bash-4.4# function @() { echo foo; } bash-4.4# @() foo bash-4.4# declare -f @() () { echo foo } bash-4.4# bash-4.4# unset -f '@()' bash-4.4# bash-4.4# shopt -s nullglob bash-4.4# function @() { echo foo; } bash-4.4# @() bash-4.4# declare -f @() () { echo foo } bash-4.4# So when extglob is on, @() is handled as a glob pattern which makes sense. But the behavior after shopt -s nullglob indicates that the glob pattern @() is not *filename-expand*ed for function @(). This looks kind of counter-intuitive to me. Bug or feature? -clark