@@ -3595,10 +3595,14 @@ _comp__init_collect_startup_configs()
35953595
35963596 # collect startup files
35973597 local -A startup_visited=()
3598- local startup_dir startup_files
35993598 for startup_dir in " ${startup_dirs[@]} " ; do
36003599 [[ -d $startup_dir && -r $startup_dir && -x $startup_dir ]] || continue
3600+
3601+ local -a startup_files=()
36013602 _comp_expand_glob startup_files " $startup_dir /*.bash" || continue
3603+
3604+ local -a selected_startup_files=()
3605+ local startup_dir
36023606 for startup_file in " ${startup_files[@]} " ; do
36033607 [[ ! -d $startup_file && -r $startup_file ]] || continue
36043608
@@ -3610,8 +3614,19 @@ _comp__init_collect_startup_configs()
36103614 [[ ${startup_visited[$name]-} ]] && continue
36113615 startup_visited[$name ]=set
36123616
3613- _comp__init_startup_configs +=(" $startup_file " )
3617+ selected_startup_files +=(" $startup_file " )
36143618 done
3619+ (( ${# selected_startup_files[@]} )) || continue
3620+
3621+ # Note: bash < 4.4 has a bug that all elements are connected with
3622+ # ${a[@]+"${a[@]}"} when IFS does not contain whitespace.
3623+ local IFS=$' \t\n '
3624+ # Prepend the selected startup files because we want to source the
3625+ # system startup files earlier.
3626+ _comp__init_startup_configs=(
3627+ " ${selected_startup_files[@]} "
3628+ ${_comp__init_startup_configs[@]+" ${_comp__init_startup_configs[@]} " }
3629+ )
36153630 done
36163631
36173632 # collect compat completion directory definitions
0 commit comments