当设置IFS拆分换行符时,为什么需要包含退格?

我很好奇,为什么当设置IFS拆分换行符时需要退格:

IFS=$(echo -en "\n\b") 

为什么我不能只用这个(这是行不通的)呢?

 IFS=$(echo -en "\n") 

我在一个Linux系统上保存Unix行结尾的文件。 我用新行将我的文件转换为hex,它绝对只使用“0a”作为换行符。

我GOOGLE了很多,虽然很多网页文档的新行,其次是退格解决scheme,没有我find解释为什么退格是必需的。

-大卫。

因为bash手册对于命令replace说:

Bash通过执行命令执行扩展,并用命令的标准输出replace命令replace,删除任何尾随的换行符。

因此,通过添加\b您可以防止删除\n

一个更干净的方法来做到这一点可以使用$''引用,如下所示:

 IFS=$'\n' 

我只记得最简单的方法。 用debian wheezytestingbash。

 IFS=" " 

别开玩笑:)

这是因为使用了echo和命令replace。

 prompt> x=$(echo -en "\n") prompt> echo ${#x} 0 prompt> x=$(echo -en "\n\b") prompt> echo ${#x} 2 

$()带换行符和\b防止\n成为尾随的换行符,而不太可能出现在任何文本中。 IFS=$'\n'是设置IFS在换行符上分割的更好方法。

只要按下input,不分配任何东西也可以。 虽然,看起来有人犯了一个错误,很难理解。

 IFS= #This is a line