В моем ответе я буду использовать обозначения $(cat file1)
, что хороший способ вызова подпроцесс (backtics запутываются).
Если вы хотите, чтобы петли J для каждого значения I, объединить петлю с
#!/bin/bash
for i in $(cat file1); do
for j in $(cat file2); do
command_1
command_2
done
done
Я думаю, что вы хотите объединить петлю по-разному: называют одни и те же команды для всего в обеих файлах. Это может быть сделано с
#!/bin/bash
for i in $(cat file1) $(cat file2); do
command_1
command_2
done
В этом случае два cat
команды могут быть объединены:
#!/bin/bash
for i in $(cat file1 file2); do
command_1
command_2
done
Данный скрипт делает очень мало со значением i
. Ваши команды вызывают для каждого слова в файлах file1 и file2. Я думаю, что вы хотите, чтобы вызвать команды для каждой строки в этих файлах, которые можно сделать по-другому:
#!/bin/bash
cat file1 file2 | while read -r line; do
command_1 "${line}"
command_2 "${line}"
done
При использовании этого для других случаев, пожалуйста, помните, что вы можете также read
разделить каждую строку в словах и когда у вас есть только один входной файл, который вы можете сделать без cat
:
#!/bin/bash
cat file1 file2 > file3
while read -r var1 var2 othervars; do
command_1 "${var1}"
command_2 "${var2}"
echo "The remaining words ${othervars} are not used in this loop."
done < file3
Что мешает вам сделать это? – ForceBru
В чем проблема? – 123
Не могли бы вы подробнее рассказать? – midihenry