>_ IzzyLab

Практическое задание

Читай файл через while read

средне

Скрипт /root/print.sh читает /root/items.txt конструкцией for line in $(cat ...) и рвёт строки с пробелами на части. Перепиши чтение так, чтобы shellcheck был чист, а строка «hello world» осталась целой.

Что потренируешь:
  • shellcheck
  • while read
  • SC2013
  • IFS
  • построчное чтение

Разбор темы

Идиома построчного чтения файла в bash — while IFS= read -r line; do … done < файл. read берёт по одной строке из перенаправленного ввода; IFS= перед ним отключает срезание ведущих/хвостовых пробелов, а -r запрещает интерпретацию обратного слэша. Антипаттерн for x in $(cat файл) подставляет весь текст и разбивает его по IFS (пробелы И переводы строк), из-за чего строки с пробелами рассыпаются, а glob-символы раскрываются; shellcheck предупреждает об этом правилом SC2013.

Что проверяется

  1. shellcheck без замечаний
  2. строка с пробелом целая

Как это выглядит