Не могли бы вы попробовать следующее. Это должно вывести самый длинный массив (может быть кратным по числу одинаковой максимальной длины), позже вы можете назначить его массиву.
echo "${pathList[@]}" |
awk -F'/' '{max=max>NF?max:NF;a[NF]=(a[NF]?a[NF] ORS:"")$0} END{print a[max]}'
Я только что создал тестовый массив с значения, предоставленные вами и проверенные следующим образом:
arr1=($(printf '%s\n' "${pathList[@]}" |\
awk -F'/' '{max=max>NF?max:NF;a[NF]=(a[NF]?a[NF] ORS:"")$0} END{print a[max]}'))
Когда я вижу содержимое нового массива, они выглядят следующим образом:
echo "${arr1[@]}"
/foo/bar/raw/2020/02/
/foo/bar/logs/2020/02/
Объяснение awk
код: Добавление подробного объяснения для awk
кода.
awk -F'/' ' ##Starting awk program from here and setting field separator as / for all lines.
{
max=max>NF?max:NF ##Creating variable max and its checking condition if max is greater than NF then let it be same else set its value to current NF value.
a[NF]=(a[NF]?a[NF] ORS:"")$0 ##Creating an array a with index of value of NF and keep appending its value with new line to it.
}
END{ ##Starting END section of this program.
print a[max] ##Printing value of array a with index of variable max.
}'