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

时间:2018-06-17 18:43:19

标签: bash

我有一个列表文件,每行的格式都是“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读取文件有什么问题?

1 个答案:

答案 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循环。该变量实际上已设置,但是分配了一个空字符串("")值。