Вопрос в том, почему? И где я сделал это неправильно?
Ответ в том, что вы не используете правильную функцию для работы, и вы используете ее неправильно. Посмотрите, как человек читает для просветления, начиная с того, где сказано:
Читать одну строку
Чтобы выполнить то, что кажется вашей целью, я бы сделал:
readarray -t lines < osss
printf "%s " "${lines[@]}"
Объяснение: Сначала прочитайте все строки в массиве, затем напечатайте все элементы массива, разделенные пробелом. Это имеет больше смысла, чем создание отдельных переменных и использование циклов, и не требует заранее знать общее количество строк.
Примечание: есть несколько инструментов, которые обрабатывают текстовые файлы построчно, такие как sed
, awk
, perl -lane
, php -r
. В зависимости от того, что вам нужно сделать, сохранение содержимого строк в переменные bash
может оказаться излишним.