我有一个列表文件,每行的格式都是“0,[0-9]”。我在bash文件中编写以下代码:
while read line
do
grep $line Search.txt
done < list.txt
但是当我写
时,我没有得到任何结果command="$line Search.txt"
echo $command
我只得到
Search.txt
和$ line变为NULL。 使用bash或使用while读取文件有什么问题?
答案 0 :(得分:0)
我希望我能正确阅读您的问题,后一个块(使用$line
)是您在第一个块(带有while
循环之后)运行的,如果是这样,则会发生以下情况:>
while
运行直到read
“失败”,即最有可能达到EOF为止。但是最后一次read
调用仍然发生,并且“什么也没读”到line
中。见下文。
例如,您可以在循环中保存该值:
while read line; do
grep $line Search.txt
last=line
done < list.txt
在您通过last
变量的循环值访问之后,最后一行读取的位置将可用。
如上所述,对while
循环会发生什么的实际解释。让我们拥有文件f
:
aaa
bbb
还有一个脚本example.sh
(基本上是展开的循环,因为我们知道通过次数):
#!/bin/bash
read line
echo ${?}: \"$line\"
read line
echo ${?}: \"$line\"
read line
echo ${?}: \"$line\"
运行./example.sh < f
时会产生:
$ ./example.sh < f
0: "aaa"
0: "bbb"
1: ""
旁注:在最后一次(read
)调用之后,经过了while
循环。该变量实际上已设置,但是分配了一个空字符串(""
)值。