bash while 循环未终止

时间:2021-02-03 16:34:09

标签: bash

我在 bash 中写了一个 liner:

while read line; printf $line' '; do : ; done < someFile

它似乎很好地遍历了文件的行,但随后它进入了一个无限循环的输入空间。我意识到我的错误是将 printf 放在 do 之前而不是之后,但我仍然不明白这里发生了什么。为什么会出现无限循环?

2 个答案:

答案 0 :(得分:4)

您放错了do。你想要:

while read line; do printf "%s" "$line "; done < someFile

您编写它的方式是有效的,但语义不是您所期望的。

while read line; printf $line' '; do : ; done < someFile

正在读取该行然后打印出来。计算 printf 返回的值以确定是否进入循环体。由于 printf 成功,它进入循环。

一般语法是 while {list of commands}; do {list of commands}; done 执行第一个命令列表,并评估最终命令的结果以确定是否进入循环体。

但看起来你真正想要的是:

tr \\n ' ' < someFile

答案 1 :(得分:0)

正确的语法是

while read line; do printf $line' '; done  < someFile

试试看;)

如果用多行脚本写更好理解

#!/bin/bash   
while read line
do
  printf $line' '
done < SomeFile
相关问题