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

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

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

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

 strings=loadFromFile for opt in $strings do somestuff 

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

  • Сценарий Bash - части chomp из строки
  • Диапазон значений grep (/ sed / awk)
  • Разделение строки до определенного места
  • Как захватить содержимое строки до определенной строки?
  • Есть ли более быстрый способ получить этот выходной файл в Linux?
  • Как выбрать последнее число в строке в сценарии bash
  • Почему эта команда xargs не работает?
  • 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 - лучшая ОС в мире.