У вас нет новой строки между значениями. Следовательно, вам нужно указать разделитель через-d
:
mapfile -d ' ' Latitude < final_ADCP_Saved.matLatitude.txt
mapfile -d ' ' Longitude < final_ADCP_Saved.matLongitude.txt
Теперь каждая широта/долгота должна быть правильно помещена в отдельный элемент массива.
РЕДАКТИРОВАТЬ :Вариант -d
кажется современным башизмом. Другим способом исправить это может быть использование tr
для преобразования пробелов в новые строки (и использование -s
для удаления дубликатов):
tr -s ' ' '\n' < final_ADCP_Saved.matLatitude.txt | mapfile Latitude
К сожалению, это не работает, так как конвейер заставляет mapfile
запускаться в подоболочке, и, следовательно, переменная недоступна в основной оболочке.
Обходной путь: сначала изменить стандартный ввод оболочки на подстановку процесса, а затем запуститьmapfile
:
#!/bin/bash
exec < <(tr -s ' ' '\n' < final_ADCP_Saved.matLatitude.txt)
mapfile Latitude
exec < <(tr -s ' ' '\n' < final_ADCP_Saved.matLongitude.txt)
mapfile Longitude
echo "length of Lat is ${#Latitude[@]}"
echo "length of Lon is ${#Longitude[@]}"
Обратите внимание, что я изменил первую строку на #!/bin/bash
, так как это будет работать только в bash.
РЕДАКТИРОВАТЬ2
Теперь я думаю об этом, часть exec
не нужно делать отдельно:
#!/bin/bash
mapfile Latitude < <(tr -s ' ' '\n' < final_ADCP_Saved.matLatitude.txt)
mapfile Longitude < <(tr -s ' ' '\n' < final_ADCP_Saved.matLongitude.txt)
echo "length of Lat is ${#Latitude[@]}"
echo "length of Lon is ${#Longitude[@]}"