用CR和LF解释这个printf



遵循以下示例:

printf "abcder1"

1%

printf "abcder1n"

1bcde

我无法理解这种行为。。。我在想这些答案:

1bcde%

1bcde

输出中的字符%不是printf命令输出的一部分。这只是shell中的一个指示,即最后一行输出不是由换行符完成的。这样的"%"被添加到该行的当前位置,并且该当前位置之后的每个字符都被擦除。

以下是字符%不是printf:输出的一部分的证明

fenyo% printf "ab"
ab%
fenyo% printf "ab" | od -xa
0000000    6261
a   b
0000002
fenyo%

如您所见,输出仅由与字符"相对应的2个字节组成;a";以及";b";。

因此,我们可以解释两种行为:

  1. 关于printf "abcder1n"的行为,以下是解释:
  • printf的最后一个参数是换行符(n(,因此shell不会添加%

  • 就在1之前有一个r,因此1将在行首打印,擦除之前在同一位置打印的字符a

    这两个事实解释了为什么会得到输出1bcde

  1. 关于printf "abcder1"的行为,以下是解释:
  • 1之前有一个r,因此1将在行首打印,擦除之前在同一位置打印的字符a。在该步骤中,输出为1bcde,并且当前写入位置在b上;

  • printf的最后一个参数不是换行符(n(,因此shell将添加一个%,并在同一行中删除其后的所有内容。由于当前位置在b上,该字符被%替换,并且剩余字符(cdef(被擦除。

    这两个事实解释了为什么会得到输出1%

相关内容

  • 没有找到相关文章

最新更新