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

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

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

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

 strings=loadFromFile for opt in $strings do somestuff 

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

  • Сопоставьте текущую строку до строки, которая не соответствует шаблону
  • Как преобразовать данные с разделителями табуляции в данные с разделителями-запятыми?
  • Как удалить все неупорядоченные строки из текстового файла?
  • Как свернуть 'grep -c <токен> * .h * .cpp' в один счет?
  • распечатать определенную строку из нескольких файлов
  • Управление дублированными строками в файлах
  • Как извлечь первое целое из текстовой строки в столбце файла с разделителями табуляции?
  • Как проверить, имеет ли файл уже строку с содержимым?
  • 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 - лучшая ОС в мире.