想要在bash中询问一些事情。
使用while循环时,我已经看到使用了如下所示的最后一行:
完成< {文件名}
例如,在阅读文件时看到。
while read line; do
echo $line
done < file
我猜它正在检查一些布尔语句但是&#34; file&#34;不会以任何方式改变。
这到底是什么意思?
答案 0 :(得分:6)
while read line; do
echo $line
done < file
这不是bash
特定的。它将文件重定向到循环的标准输入。在您显示的情况下,这将转到read
命令。那有什么不对呢?
while read line < file # WRONG!
do
echo $line
done
这会产生无限循环。为什么?因为read line < file
读取file
的第一行。所以呢?那么它在循环的每次迭代中都会这样做,不断读取文件的第一行。这是因为它实际读取文件的第一行然后关闭文件,文件位置不会保留。
循环仅在read
不成功(返回非零)时退出,这通常是在它到达文件结束(EOF)时。在错误的例子中它永远不会命中EOF,它每次成功读取第一行,所以我们得到一个无限循环。
语法也可以与函数一起使用(尽管你经常看不到它):
myfunc() {
while read line; do
echo $line
done
} < file
最后,为了检查你是否理解这一点,这里会发生什么?
while read line
do
echo "x" $line
cat
done < file
答案 1 :(得分:4)
使用&lt;你基本上是在发送&#34; file&#34;的内容。到了while循环。
完整文档:here