Вот простая команда, которую я запускаю в bash, но массив выиграл; t по какой-то причине заселен.Ошибка заполнения массива Bash
array=() && sudo iwlist wlan0 scan | grep 'Address'| while read line; do array[${#array[@]}]=$line; done
Я также попытался заполнить массив следующим образом:
array=()
sudo iwlist wlan0 scan | grep 'Address'| while read line; do array+=($line); done
, но это дает мне тот же результат. Я знаю, что это работает, потому что, когда я это сделать:
sudo iwlist wlan0 scan | grep 'Address'| while read line; do "echo $line"; done
он будет печатать каждую строку, которая передается по конвейеру от Grep на время цикла.
Когда я проверяю размер массива «echo $ {# array [@]», он покажет 0, и если я напечатаю массив, он, очевидно, ничего не напечатает. Вы видите ошибки в строке?
** ОБНОВЛЕНИЕ. Я получил это работает, используя для цикла следующим образом:
for line in $(sudo iwlist wlan0 scan | grep 'Address' -A5); do array+=($line); done
Даже подумал, что я использовал bash в течение длительного времени, я не знал этого, так как всегда использовал, когда читал для печати данные напрямую, без необходимости хранить его в любом месте. В любом случае, я решил свою проблему, используя цикл for так: for line in (sudo iwlist wlan0 scan | grep 'Address'); do array + = ($ line); сделанный. Cheers – JohnnyLoo
@JuanCarlos Использование цикла 'for' не является хорошей идеей, так как расширенные значения в' $() 'будут открыты для расширения пути и иногда будут давать вам разные значения для' $ line'. Это также заставляет bash выделять большой буфер для всего вывода сначала перед чтением каждой строки, что не очень хорошо для больших выходов по сравнению с чтением с 'while'. – konsolebox
Отлично, что отлично работает. Спасибо чувак – JohnnyLoo