Возникли проблемы с использованием IFS для вырезания строки в массив. БАШ

Я пробовал все, что мог придумать, чтобы разрезать это на отдельные элементы для моего массива, но я борюсь.

Вот что я пытаюсь сделать..

(Эта команда просто вырывает IP-адреса из первого возвращенного элемента)

$ IFS=$"\n"
$ aaa=( $(netstat -nr | grep -v '^0.0.0.0' | grep -v 'eth' | grep "UGH" | sed 's/ .*//') )

$ echo "${#aaa[@]}"
1
$ echo "${aaa[0]}"
4.4.4.4
5.5.5.5

Это показывает более одного значения, когда я ищу массив для разделения 4.4.4.4 на ${aaa[0]} и 5.5.5.5 на ${aaa[1]}

Я пытался:

IFS="\n"

IFS=$"\n"

IFS=" "

Очень смущен, так как в последнее время я много работал с массивами и никогда не сталкивался с этой конкретной проблемой.

Может кто-нибудь сказать мне, что я делаю неправильно?


person linux4fun    schedule 09.01.2015    source источник
comment
Попробуйте $'\n', но зачем вам вообще IFS? Вы получаете два слова обратно, нормальное IFS разделит их правильно.   -  person Etan Reisner    schedule 09.01.2015
comment
Просто снимите IFS, а затем заполните массив   -  person anubhava    schedule 09.01.2015
comment
Добавьте вывод netstat -nr | grep -v '^0.0.0.0' | grep -v 'eth' | grep "UGH" | sed 's/ .*//' к вашему вопросу.   -  person Cyrus    schedule 09.01.2015
comment
'unset IFS' помог мне, я не подумал отключить его от предыдущей команды. Причина, по которой я изменил IFS=, заключалась в том, что массиву необходимо было сохранять пробелы в именах файлов, поскольку он разделялся на отдельные массивы. Я забыл это отменить!   -  person linux4fun    schedule 09.01.2015
comment
p.s. Вывод для человека, который спрашивал, был: 4.4.4.4 5.5.5.5   -  person linux4fun    schedule 09.01.2015


Ответы (1)


На этой другой странице stackoverflow есть очень хороший пример использования IFS + read -a для разделения строки на массив.

Как разделение строки на массив с помощью «чтения» с разделителем слов IFS в bash создает дополнительный элемент пробела?

netstat устарел, заменен на ss, поэтому я не уверен, как точно воспроизвести вашу проблему.

person Mathieu J.    schedule 13.10.2016