Хранить LINE в строку в Bash - PullRequest
       16

Хранить LINE в строку в Bash

1 голос
/ 26 января 2010

У меня есть скрипт bash, который читает строки

filename=$

while read LINE
do
 ...... 
done < $filename

Интересно, как я могу хранить $ LINE в строке (my_string), чтобы для каждой строки я мог сделать

echo $ my_thing "" $ my_string

Я пробовал несколько вещей, но когда я печатаю с помощью echo или printf, $ LINE удаляет все перед этим

Tjans

Ответы [ 3 ]

1 голос
/ 26 января 2010

Ваш файл может содержать возврат каретки. Например, это может быть файл DOS или Windows, который имеет этот стиль окончания строк. Если это так, вы можете запустить dos2unix для файла, чтобы преобразовать его в конец строки в стиле Unix, или вы можете удалить их по мере чтения:

LINE="${LINE//$'\r'}"

, который идет сразу после оператора do.

0 голосов
/ 16 февраля 2010

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

Позвольте мне отметить, что если вы собираетесь выполнять обработку "пока читаете ..." в bash-скрипте, вам нужно использовать оба флаг -r для чтения и установите ваш IFS в нулевую строку. Первый необходим для сохранения обратной косой черты в необработанном стандартном вводе, а второй - для исключения пробелов в начале и конце стандартного ввода. Вы можете объединить их так:

while IFS= read-r LINE; do
    echo "$LINE"
done < "file"
0 голосов
/ 26 января 2010

когда вы выполняете цикл чтения в то время, строка сохраняется в переменной $ LINE, поэтому попробуйте это

while read -r LINE
do
 echo "$LINE $LINE"
done <"file"

если вы хотите сохранить LINE в другой строке, сделайте это

my_other_string=$LINE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...