Ошибка не в присваивании, а в цикле по массиву.
IFS=: dirs=($PATH)
for dir in "${dirs[@]}"; do
echo "$dir"
done
работает на меня; или более кратко
printf '%s\n' "${dirs[@]}"
Как вы обнаружили, $dirs
возвращает только первый элемент из массива.
Чтобы фактически просмотреть эти каталоги в поисках определенного файла, возможно, попробуйте
desired_file_name=$1 # or whatever
for dir in "${dirs[@]}"; do
test -e "$dir/$desired_file_name" || continue
echo "$0: found $dir/$desired_file_name" >&2
done
Другой подход
find "${dirs[@]}" -name "$desired_file_name"
(Вы должны предпочесть строчные буквы для своих личных переменных, поэтому я изменил DIRS
на dirs
. Меньше криков тоже хорошо для глаз.)