读取文件行后,bash文件不能使用cat字符串

读取文件行后,bash文件不能使用cat字符串,bash,Bash,我有一个列表文件,每行的格式类似于“0,[0-9]”。我在bash文件中编写以下代码: while read line do grep $line Search.txt done < list.txt 我只有 Search.txt 并且$line变为空。 bash或使用while读取文件有什么问题?我希望我正确地阅读了您的问题,后一个块(使用$line)是在第一个块之后运行的(使用while循环),如果是这样,则会发生以下情况: while运行,直到读取“失败”,即最有可能达到

我有一个列表文件,每行的格式类似于“0,[0-9]”。我在bash文件中编写以下代码:

while read line 
do
   grep $line Search.txt
done < list.txt
我只有

Search.txt
并且$line变为空。
bash或使用while读取文件有什么问题?

我希望我正确地阅读了您的问题,后一个块(使用
$line
)是在第一个块之后运行的(使用
while
循环),如果是这样,则会发生以下情况:

while
运行,直到
读取
“失败”,即最有可能达到EOF。但最后的
read
调用仍然发生,并且“nothing”头被读入
行。见下文

您可以在循环中保存此值,例如:

while read line; do
   grep $line Search.txt
   last=line
done < list.txt
还有一个脚本
example.sh
(基本上是一个展开的循环,因为我们知道传递的次数):

在运行
/example.sh
时产生:

$ ./example.sh < f
0: "aaa"
0: "bbb"
1: ""
$。/example.sh

旁注:在最后一次(
read
)调用之后,通过
while
循环。变量实际上已设置,但分配了一个空字符串(
)值。

不要将命令放入变量中。听起来您可以使用
grep-f list.txt Search.txt
而不是循环。文件是否包含空行?我正是想通过读取bash格式的文件来实现grep-f。我没有空行。当在$line之后添加其他字符串(例如grep$line Search.txt)时,我在终端中打印$line时遇到问题
aaa
bbb
#!/bin/bash
read line
echo ${?}: \"$line\"
read line
echo ${?}: \"$line\"
read line
echo ${?}: \"$line\"
$ ./example.sh < f
0: "aaa"
0: "bbb"
1: ""