Where is bash's "shopt extglob" turned on for my interactive shell?

On my 14.04 VM, I found it in /usr/share/bash-completion/bash_completion:

ubuntu@ubuntu:~$ grep extglob /usr/share/bash-completion/bash_completion 
shopt -s extglob progcomp
ubuntu@ubuntu:~$ 

This is sourced by ~/.bashrc:

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
  fi
fi

This can be figured out by running bash -x, which shows all sourced startup files and their commands. Run script -c "bash -x", then exit in the new interactive shell, then examine the typescript file output from script:

+ . /usr/share/bash-completion/bash_completion

...

++ shopt -s extglob progcomp

The +'s indicate the level of sourced file, so when we look one level up from the shopt command, we see /usr/share/bash-completion/bash_completion is sourced.


It is set under /usr/share/bash-completion/bash_completion file:

shopt -s extglob progcomp

The ~/.bashrc file has the following, if posix option is unset then:

if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion

That means if the file /usr/share/bash-completion/bash_completion exists it will source the file.

As that file contains the line to set extglob, it will be set upon stating of an interactive non-login shell.