为什么Bash中的外部循环没有完成?

时间:2018-02-20 07:09:58

标签: bash

我不明白为什么这个外循环只是因为内循环可以完成而退出。

$1指的是包含大量模式/替换行的文件。 $2是一个单词列表。问题是外环在第一个模式/替换线之后已经退出。我希望在$1中的所有行都被读取后退出。

#!/bin/bash

#Receive SED SCRIPT WORDLIST 

if [ -f temp.txt ];
then 
    > temp.txt
else
    touch temp.txt
fi

while IFS='' read -r line || [[ -n "$line" ]];
do
    echo -e "s/$line/p" >> temp.txt

    while IFS='' read -r line || [[ -n "$line" ]];
    do
        sed -nf temp.txt $2
    done
        > temp.txt
done < $1        

1 个答案:

答案 0 :(得分:0)

我知道您需要计算de ded表达式并将其写入文件,然后将此表达式应用于其他文件。

这比你做的容易得多。

首先,您无需检查 temp.txt 是否已存在。将命令的输出重定向到文件时,如果该文件不存在,则会创建该文件。但是如果要重置文件,我建议您使用 truncate 命令。

在脚本的主体中,我不明白你为什么要把第二个while循环从文件中读取,但是你没有把文件读出来。

我认为你需要的是这样的:

truncate -s 0 sed_expressions.txt

while IFS='' read -r line || [[ -n "$line" ]]; do
    echo -e "s/$line/p" >> sed_expressions.txt
done < $1
sed -nf sed_expressions.txt $2 > out_file.txt

试试并告诉我你是否需要这样做。

再见!