我在 bash 中写了一个 liner:
while read line; printf $line' '; do : ; done < someFile
它似乎很好地遍历了文件的行,但随后它进入了一个无限循环的输入空间。我意识到我的错误是将 printf
放在 do
之前而不是之后,但我仍然不明白这里发生了什么。为什么会出现无限循环?
答案 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