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

When setting IFS to split on newlines, why is it necessary to include a backspace?

我很好奇为什么在将ifs设置为这样的换行符时需要退格:

1
2
IFS=$(echo -en"
\b"
)

为什么我不能只用这个(不起作用)来代替呢?

1
2
IFS=$(echo -en"
"
)

我在一个Linux系统上,用Unix行尾保存文件。我已经用换行符将文件转换为十六进制,它肯定只使用"0A"作为换行符。

我在谷歌上搜索了很多页面,虽然很多页面都记录了换行符和退格符的解决方案,但没有一个页面能解释为什么需要退格符。

-戴维。


因为正如bash手册所说,关于命令替换:

Bash performs the expansion by executing command and replacing the command substitution with the standard output of the command, with any trailing newlines deleted.

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

一种更简单的方法是使用$''引用,如下所示:

1
2
IFS=$'
'


我只记得最简单的方法。在Debian气喘上用bash测试。

1
2
IFS="
"

别开玩笑了)


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

1
2
3
4
5
6
7
8
prompt> x=$(echo -en"
"
)
prompt> echo ${#x}
0
prompt> x=$(echo -en"
\b"
)
prompt> echo ${#x}
2

$()条尾随的换行符和\b防止
成为尾随的换行符,同时在任何文本中都极不可能出现。IFS=$'
'
是设置国际单项体育联合会在新线上进行拆分的更好方法。


只需按Enter键而不指定任何内容也可以。不过,似乎有人犯了错误,很难理解。

1
2
IFS=
#This is a line