@@ -3596,10 +3596,14 @@ _comp__init_collect_startup_configs()
35963596
35973597 # collect startup files
35983598 local -A startup_visited=()
3599- local startup_dir startup_files
36003599 for startup_dir in " ${startup_dirs[@]} " ; do
36013600 [[ -d $startup_dir && -r $startup_dir && -x $startup_dir ]] || continue
3601+
3602+ local -a startup_files=()
36023603 _comp_expand_glob startup_files " $startup_dir /*.bash" || continue
3604+
3605+ local -a selected_startup_files=()
3606+ local startup_dir
36033607 for startup_file in " ${startup_files[@]} " ; do
36043608 [[ ! -d $startup_file && -r $startup_file ]] || continue
36053609
@@ -3611,8 +3615,19 @@ _comp__init_collect_startup_configs()
36113615 [[ ${startup_visited[$name]-} ]] && continue
36123616 startup_visited[$name ]=set
36133617
3614- _comp__init_startup_configs +=(" $startup_file " )
3618+ selected_startup_files +=(" $startup_file " )
36153619 done
3620+ (( ${# selected_startup_files[@]} )) || continue
3621+
3622+ # Note: bash < 4.4 has a bug that all elements are connected with
3623+ # ${a[@]+"${a[@]}"} when IFS does not contain whitespace.
3624+ local IFS=$' \t\n '
3625+ # Prepend the selected startup files because we want to source the
3626+ # system startup files earlier.
3627+ _comp__init_startup_configs=(
3628+ " ${selected_startup_files[@]} "
3629+ ${_comp__init_startup_configs[@]+" ${_comp__init_startup_configs[@]} " }
3630+ )
36163631 done
36173632
36183633 # collect compat completion directory definitions
0 commit comments