Чтение файла строка за строкой присвоение значения переменной


у меня следующая .текстовый файл:

Marco
Paolo
Antonio

Я хочу, чтобы прочитать его построчно, и для каждой строки Я хочу назначить .значение строки txt для переменной. Предположим, что моя переменная $name поток-это:

  • Читать первую строку из файла
  • назначение $name = "Марко"
  • сделать некоторые задачи, с $name
  • Читать вторую строку из файла
  • назначение $name = "Паоло"
5   553   0000-00-00 00:00:00

5 ответов:

следующее (сохранить как rr.sh) читает файл, передаваемый в качестве аргумента строка за строкой:

#!/bin/bash
while IFS='' read -r line || [[ -n "$line" ]]; do
    echo "Text read from file: $line"
done < ""

объяснение:

  • IFS='' (или IFS=) предотвращает начальные/конечные пробельные символы могут быть обрезаны.
  • -r предотвращает обратную косую черту от интерпретации.
  • || [[ -n $line ]] предотвращает игнорирование последней строки, если она не заканчивается на \n (поскольку read возвращает ненулевой код возврата при обнаружении ВФ.)

запустить скрипт следующим образом:

chmod +x rr.sh
./rr.sh filename.txt

....

Я призываю вас использовать -r флаг read что означает:

-r  Do not treat a backslash character in any special way. Consider each
    backslash to be part of the input line.

я цитирую от man 1 read.

другое дело-взять имя файла в качестве аргумента.

вот обновленный код:

#!/usr/bin/bash
filename=""
while read -r line
do
    name="$line"
    echo "Name read from file - $name"
done < "$filename"

использование следующего шаблона Bash должно позволить вам читать одно значение за раз из файла и обрабатывать его.

while read name
do
    # Do what you want to $name
done < filename
#! /bin/bash
cat filename | while read LINE
do
echo $LINE
done

использование:

filename=
IFS=$'\n'
for next in