Bash 对于'cat file'中的i,键入2个变量和2个文件

Bash 对于'cat file'中的i,键入2个变量和2个文件,bash,for-loop,Bash,For Loop,我有这个剧本 for i in `cat file` do echo $i done 如何在同一个循环中包含来自2个不同文件的2个变量 得到 echo $i + $f 可以使用以下脚本执行此操作: #!/usr/bin/bash state=0 for i in $(paste file1 file2) ; do if [[ $state -eq 0 ]] ; then state=1 save=$i else state=0

我有这个剧本

for i in `cat file`
do
echo $i
done
如何在同一个循环中包含来自2个不同文件的2个变量

得到

echo $i + $f

可以使用以下脚本执行此操作:

#!/usr/bin/bash

state=0
for i in $(paste file1 file2) ; do
    if [[ $state -eq 0 ]] ; then
        state=1
        save=$i
    else
        state=0
        echo $save and $i
    fi
done
使用两个输入文件:

$ cat file1
1
2
3
4
5
以及:

您将获得以下输出:

1 and a
2 and b
3 and c
4 and d
5 and e
这个脚本使用粘贴基本上在两个文件之间创建一个新的参数序列,然后使用一个非常简单的状态机来拾取和处理这些参数对


请记住,如果您的行中包含空格,它将不起作用,但我假设这不是问题,因为您的原始脚本也没有空格。

,而IFS='|'read-r I j;不要重复$i和$j;完成<使用经典shell而非特定于Bash的结构的简单解决方案使用:

while IFS='|' read -r i j; do echo $i and $j; done < <(paste -d '|' file1 file2)
paste file1 file2 |
while read i j
do echo $i and $j
done
这假设file1中的数据中没有空格(file2中的空格无论如何都会被处理,因为
j
会在每一行输入上获取第二个和后续的单词)。如果您需要担心这一点,那么您可以修改IFS等:

paste -d'|' file1 file2 |
while IFS='|' read i j
do echo $i and $j
done
paste -d'|' file1 file2 |
while IFS='|' read i j
do echo $i and $j
done