2015-08-05 3 views
1

Я использую этот код для загрузки файла в массив в Баше:чтение файла в массив с пустыми строками

IFS=$'\n' read -d '' -r -a LINES < "$PAR1" 

Но, к сожалению, этот код пропускает пустые строки.

Я попытался следующий код:

IFS=$'\n' read -r -a LINES < "$PAR1" 

Но этот вариант загружает только одну строку.

Как загрузить файл в массив в bash, не пропуская пустые строки?

P.S. Я проверяю количество загруженных линий на следующей командой:

echo ${#LINES[@]} 
+1

Имена переменных All-caps зарезервированы по соглашению, чтобы избежать переписывания имен, влияющих на систему, по ошибке. См. Четвертый абзац http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap08.html, имея в виду, что переменные среды и переменные оболочки совместно используют пространство имен. –

ответ

2

Чтобы не делать ничего сверхъестественного, и оставаться совместимы со всеми версиями Баш в общее пользование (на момент написания статьи, Apple поставляет Баш 3.2.x, чтобы избежать необходимости соблюдать GPLv3):

lines=() 
while IFS= read -r line; do 
    lines+=("$line") 
done 

Смотрите также BashFAQ #001.

+0

Большое спасибо! Что касается последней строки, я использовал код из вашей ссылки: 'линии =() в то время как IFS = чтение -r линий делать линии + = ("$ строки") Готов < "$ PAR1" [[-n $ line]] && lines + = ("$ line") ' –

2

Вы можете использовать mapfile доступны в BASH 4+

mapfile -t lines < "$PAR1" 
Смежные вопросы