“\”在ksh输出中丢失

我已经写了一个小脚本如下

#!/usr/bin/ksh cat test |while read line1 do echo "$line1" done 

input文件“test”有以下几行

Kensington K64391US C \ i70 Wireless
桌面任天堂Wii无线双节棍
\ M470 DeLonghi HHP1500云母面板
Vi \ 20散热器加热器

但输出中缺less“\”,如下所示

Kensington K64391US Ci70无线
桌面任天堂Wii无线双节棍
M470 DeLonghi HHP1500云母面板Vi20
散热器加热器

我怎样才能得到“\”来输出?

使用read-r选项。

ksh手册页:

在原始模式下,-r,\字符不被特别处理。

那么,一个简单而快速的答案就是用双斜杠replaceinput文件中的所有单斜杠。 这将导致输出中出现单斜杠。 (例如:在vi中,使用%s/\\/\\\\/g

推理:反斜杠是一个转义字符。 它被用来表示“下一个字符应该从字面上来处理”,以避免星号被当做除了星号以外的东西。 所以把它们中的两个连在一起,结果是第一个表示第二个应该被用作斜杠。

这对你是否可行,还是需要对脚本本身进行更改,而不触摸数据?

读取时使用-r:

 cat test.input | while read -r 'line' do echo "$line" done