Все ваши попытки сдерживаются тем фактом, что /app/appscripts/jenkins_modules
, кажется, содержит все элементы в одной строке, разделенные пробелом.Разделителем по умолчанию для mapfile является "\ n", поэтому ваш массив будет содержать только один элемент:
$ mapfile -d" " -t mod < <(echo "01_docker 02_gtw 99_mq_gtw");
$ echo ${#mod[@]}
3
$ mapfile -t mod < <(echo "01_docker 02_gtw 99_mq_gtw");
$ echo ${#mod[@]}
1
Как вы можете видеть, без указания разделителя, массив имеет один элемент.
Вы можете использовать цикл в стиле C, чтобы пройти массив в обратном порядке:
$ mapfile -d" " -t mod < <(echo -n "01_docker 02_gtw 99_mq_gtw");
$ for ((i = ${#mod[@]}-1; i >= 0 ; i--)); do echo "$i - ${mod[$i]}"; done
2 - 99_mq_gtw
1 - 02_gtw
0 - 01_docker
$ mapfile -t mod < <(echo "01_docker 02_gtw 99_mq_gtw");
$ for ((i = ${#mod[@]}-1; i >= 0 ; i--)); do echo "$i - ${mod[$i]}"; done
0 - 01_docker 02_gtw 99_mq_gtw
(как вы можете видеть без разделителя, установленного для mapfile, он не будет работать)
Кроме того, будьте осторожны с новой строкой в конце /app/appscripts/jenkins_modules
, -t
из mapfile не удалит ее, когда разделитель установлен в ''
. Лучше всего будет изменить/app/appscripts/jenkins_modules
иметь по одному модулю на строку.