当打印包含换行符的变量时,为什么最后一个换行符被剥离?

哈罗德·菲舍尔

file.txt的内容(无怪异,由POSIX定义的文本文件)

iguana
gecko
anole

示例脚本:

#!/bin/sh

string="$(cat file.txt)"

printf '%s' "$string"

样本输出:

[coolguy@somemachine ~]$ ./script.sh
iguana
gecko
anole[coolguy@somemachine ~]$

最后一个换行符怎么了?为什么除了最后一个保留了所有换行符?似乎如果应该已经有一个换行符了,我们就不必使用echo来添加一个换行符。

伊尔卡楚

不是打印,而是命令替换。它被定义为执行此操作。POSIX描述

外壳程序应通过在子外壳程序环境中执行命令并将命令替换项替换为命令的标准输出,从而扩展命令替换项,并在替换结束时删除一个或多个{newline}字符的序列

请注意,它会删除所有尾随的换行符,而不仅仅是一个。

在某种情况下,您可以使用命令替换来捕获单行输出,例如osrev=$(uname -r)这些实用程序通常会在命令行上打印尾随换行符,以方便用户使用。但是在shell脚本中,您可能希望将该字符串用作另一个字符串的一部分,例如filename :filename=blahblah-$osrev.dat在那种情况下,尾随的换行符只会是一件令人讨厌的事情。

当然,echo在任何情况下,平原都将添加最后的换行符。


如果您希望文件的内容保持不变,那么通常的解决方法是在命令替换中添加一个额外的字符,并在以后删除该字符:

printf "foo\nbar\n\n" > file
string=$(cat file; echo x)
string=${string%x}
printf '%q\n' "$string"

输出$'foo\nbar\n\n',显示两个尾随的换行符。


根据您打算如何处理数据,可能还有其他方法。例如,如果您想逐行处理文件,则使用一个while read循环或Bash的循环mapfile

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

分配给变量时保留最后一个换行符的存在

来自分类Dev

为什么print()打印一个空的元组而不是换行符?

来自分类Dev

删除换行符,同时保留换行符,然后再换一个换行符

来自分类Dev

需要一个脚本来从文本文件中剥离多余的换行符

来自分类Dev

将两个换行符转换为一个换行符

来自分类Dev

一个换行符等于bash中的两个换行符?

来自分类Dev

为什么列要在我的行中间添加一个换行符,而原始数据中没有换行符?

来自分类Dev

包含换行符的JavaScript变量

来自分类Dev

包含换行符的JavaScript变量

来自分类Dev

打印时的jQuery换行符

来自分类Dev

在python中,如何删除也使用换行符的打印中的最后一个字符?试过 rstrip()

来自分类Dev

为什么打印包含换行符且ajax的文本会导致错误?

来自分类Dev

为什么换行符被 concat 删除

来自分类Dev

多行变量在每个换行符前添加一个制表符

来自分类Dev

给mysqli_query时,为什么换行符消失了?

来自分类Dev

给mysqli_query时,为什么换行符消失了?

来自分类Dev

打印跳过换行符

来自分类Dev

在字符串中获取最后一个换行符的最有效方法是什么

来自分类Dev

在perl中,有什么比用换行符替换最后一个匹配项更有效的方法?

来自分类Dev

仅删除第一个换行符

来自分类Dev

powershell回到上一个换行符

来自分类Dev

用分号替换文件中的最后一个换行符

来自分类Dev

如何使用Perl忽略多行字符串中的最后一个换行符

来自分类Dev

GNU sed无法与组合字符串中的最后一个换行符匹配

来自分类Dev

如何在python中删除编号列表的最后一个元素的尾随换行符?

来自分类Dev

Shell脚本中的最后一个命令行,没有换行符

来自分类Dev

这个sed结果的最后一个换行符从哪里来?

来自分类Dev

如何从bash的最后一个参数中删除换行符?

来自分类Dev

如何替换 CSV 文件中的所有换行符,包括最后一个

Related 相关文章

  1. 1

    分配给变量时保留最后一个换行符的存在

  2. 2

    为什么print()打印一个空的元组而不是换行符?

  3. 3

    删除换行符,同时保留换行符,然后再换一个换行符

  4. 4

    需要一个脚本来从文本文件中剥离多余的换行符

  5. 5

    将两个换行符转换为一个换行符

  6. 6

    一个换行符等于bash中的两个换行符?

  7. 7

    为什么列要在我的行中间添加一个换行符,而原始数据中没有换行符?

  8. 8

    包含换行符的JavaScript变量

  9. 9

    包含换行符的JavaScript变量

  10. 10

    打印时的jQuery换行符

  11. 11

    在python中,如何删除也使用换行符的打印中的最后一个字符?试过 rstrip()

  12. 12

    为什么打印包含换行符且ajax的文本会导致错误?

  13. 13

    为什么换行符被 concat 删除

  14. 14

    多行变量在每个换行符前添加一个制表符

  15. 15

    给mysqli_query时,为什么换行符消失了?

  16. 16

    给mysqli_query时,为什么换行符消失了?

  17. 17

    打印跳过换行符

  18. 18

    在字符串中获取最后一个换行符的最有效方法是什么

  19. 19

    在perl中,有什么比用换行符替换最后一个匹配项更有效的方法?

  20. 20

    仅删除第一个换行符

  21. 21

    powershell回到上一个换行符

  22. 22

    用分号替换文件中的最后一个换行符

  23. 23

    如何使用Perl忽略多行字符串中的最后一个换行符

  24. 24

    GNU sed无法与组合字符串中的最后一个换行符匹配

  25. 25

    如何在python中删除编号列表的最后一个元素的尾随换行符?

  26. 26

    Shell脚本中的最后一个命令行,没有换行符

  27. 27

    这个sed结果的最后一个换行符从哪里来?

  28. 28

    如何从bash的最后一个参数中删除换行符?

  29. 29

    如何替换 CSV 文件中的所有换行符,包括最后一个

热门标签

归档