Просто открывайте команду чтения каждый раз, когда дескриптор файла передается в стандартный ввод:
while read line <&9; do
echo "$line"
done 9<<'EOF'
magrep "Precedence:bulk" # mass mails
magrep "broadcastSendId:.*" # mass mails
magrep "Feedback-ID:.*" # mass mails
EOF
или более расширенный пример:
while
IFS= read -r line <&9
IFS=' ' read -r file2col1 file2col2 <&10
IFS=' ' read -r file3col1 file3col2 <&11
do
echo -----------
echo "$line"
echo "$file2col1"
echo "$file2col2"
echo "$file3col1"
echo "$file2col2"
done 9<<'EOF' 10<<EOF2 11<<'EOF3'
magrep "Precedence:bulk" # mass mails
magrep "broadcastSendId:.*" # mass mails
magrep "Feedback-ID:.*" # mass mails
EOF
file2 a
file2 b
file2 c
EOF2
file3 1
file3 2
file3 3
EOF3
Если вы хотите читать файл построчноидиоматическим способом всегда устанавливайте IFS, поэтому сохраняйте начальные и конечные пробелы и используйте опцию -r
, чтобы не удивляться расширению \$
, поэтому используйте:
while IFS= read -r line
Также команду чтения, которую вы разместилине будет работать, потому что у вас есть опция -n
, которая не является опцией POSIX (и имеет разные значения в zsh и bash - вы используете версию zsh).
- Попробуйтене использовать
echo
, который не является переносимым, но использовать printf. - Подстановка команд `as устарела в bash (это не bash, я знаю), вместо этого используйте
$(...)
, что позволяет вложить.