【问题标题】:Issue with bash while loopbash while 循环的问题
【发布时间】:2016-02-18 17:57:20
【问题描述】:

所以我有一个循环

while read line
do
    printf $line"\n"
done < file.txt

这会将每一行打印在一个新行上(就像原始文件一样)。 然而当我这样做时

while read line
do
    printf $line
done < file.txt

当我期望它将所有行放在一起时,它不会打印任何内容。

(更多信息:我只是在看看循环是如何工作的,因为我在每一行都有一个数字文件,我想对每个数字应用相同的操作,然后将它们相加)

【问题讨论】:

  • 我建议使用printf "%s\n" "$line"printf "%s" "$line"。见help -m printf
  • 我遇到了同样的问题。使用 \n 它打印每一行,没有它它什么也不打印。可能是因为我在脚本前面设置了 IFS='\n' 吗?

标签: bash shell syntax printf


【解决方案1】:

printf 是这样记录的:

SYNOPSIS
     printf format [arguments ...]

第一个参数(即您的情况下 file.txt 每一行的第一个单词)被解释为格式字符串,因此它没有达到您的预期。你需要

while read line
do
    printf "%s" "$line"
done < file.txt

【讨论】:

    【解决方案2】:

    我认为它会打印出来,但你看不到它。

    如果这就是程序中打印的全部内容,您最终会输出一个(可能很长)行,但没有尾随的换行符。现在,回到你的 shell,shell 会显示它的提示符。很可能,此提示会从您的终端中删除您刚刚打印的行。

    要验证它,请将标准输出重定向到文件,然后使用lesswcod 等工具查看文件的内容。

    【讨论】:

      猜你喜欢
      • 2020-02-17
      • 2011-06-19
      • 1970-01-01
      • 2011-03-04
      • 1970-01-01
      • 1970-01-01
      • 2014-05-22
      • 1970-01-01
      • 2018-11-05
      相关资源
      最近更新 更多