Intereting Posts
Объединение частей оригинального Android с новыми источниками для создания нового изображения ALSA – Choppy audio с аудиоустройством USB после обновления до Debian Jessie Запуск Ubuntu USB-накопителя. Не удается установить беспроводной драйвер Unix с несколькими пакетами Поиск X-терминала с правильной обработкой размера окна Разрешить пользователям, не являющимся root, монтировать кеперизованную долю CIFS только в своем доме Как найти символическую ссылку, когда местоположение, в котором оно было создано, неизвестно? Установка PHP 5.3.3-24 на CentOS 6.5 (Final) Live-CD больше не загружаются как ожидалось Установка времени ожидания в режиме ожидания с помощью hdparm при загрузке с помощью правила udev не работает Насколько быстро / часто происходят измерения памяти процесса в ядре? Raspberry PI Connect2 Pi не устанавливает необходимые драйверы Как установить гостевые дополнения VirtualBox на виртуальной машине Debian Создание массивов с расширением брекета в цикле Верхняя и нижняя панели исчезли в Ubuntu 10.10 (Gnome)

Итерация по многострочной строке, хранящейся в переменной

Я читал, что плохо писать такие вещи, как for line in $(command) , кажется, что правильный путь:

 command | while IFS= read -r line; do echo $line; done 

Это отлично работает. Но что, если я хочу итерации, это содержимое переменной , а не прямой результат команды?

Например, представьте, что вы создаете следующий файл quickfox :

 The quick brown foxjumps\ over - the lazy , dog. 

Я хотел бы иметь возможность сделать что-то вроде этого:

 # This is just for the example, # I could of course stream the contents to `read` variable=$(cat quickfox); while IFS= read -r line < $variable; do echo $line; done; # this is incorrect 

В современных оболочках, таких как bash и zsh, у вас есть очень полезный редиректор `<<< ', который принимает строку как вход. Так вы бы сделали

 while IFS= read -r line ; do echo $line; done <<< "$variable" 

В противном случае вы всегда можете сделать

 echo "$variable" | while IFS= read -r line ; do echo $line; done