Bash перебирает список строк

У меня есть сценарий bash:

for opt in string1 string2 string3 ... string99 do somestuff 

Он работает, но я хотел бы заменить явный список моих строк файлом, который фактически содержит все строки; что-то вроде этого:

 strings=loadFromFile for opt in $strings do somestuff 

Как мне это сделать?

  • Как заменить слово внутри файла .DOCX с помощью командной строки Linux?
  • Поиск файла для строки, окруженной двумя другими известными строками?
  • Как я могу найти и заменить только в том случае, если совпадение составляет целое слово?
  • Зацикливание файлов с пробелами в именах?
  • Сравните 2 файла, если он находится между диапазоном чисел
  • Sed, которая игнорирует любой комментарий
  • оптимизировать команду с помощью or или pipe для анализа вывода ifconfig
  • sed + удалить слово из определенной строки
  • 5 Solutions collect form web for “Bash перебирает список строк”

    while read VAR , вероятно, лучше всего здесь, поскольку оно обрабатывает входные данные. Вы можете перенаправить его из файла, например:

     while IFS= read -r THELINE; do echo "..$THELINE" done </path/to/file 

    Это даст вам каждую строку, добавленную «..»

    Для вашего примера:

     while IFS= read -r opt; do #somestuff $opt done </path/to/file 

    См. Почему «while IFS = read» используется так часто, вместо `IFS =; в то время как читать..`? для объяснений.

     while IFS= read -r opt do some_stuff done < file_with_string 

    См. Почему «while IFS = read» используется так часто, вместо `IFS =; в то время как читать..`? для объяснений.

    while IFS= read -r line; do ...; done < aFile while IFS= read -r line; do ...; done < aFile while IFS= read -r line; do ...; done < aFile – лучший ответ

    Если ваши строки не содержат пробелов или \[*? , вы могли бы сделать

     for word in $(< aFile); do something; done 

    $(< file) – это функция bash, которая читает файл (например, cat за исключением случаев, когда требуется создать новый процесс).

    Почему бы вам не использовать встроенный readarray (требуется bash >= 4.0 )?

     readarray < FileNameFromWhereToLoad # push every line of # 'FileNameFromWhereToLoad' onto # $MAPFILE by default for i in $MAPFILE ; do echo $i done 

    Мой совет:

     cat INPUTFILE| { declare -a LINES mapfile -t LINES for line in "${LINES[@]}" do somestuff done } 
    Linux и Unix - лучшая ОС в мире.