ksh 输出中缺少“\”

ksh 输出中缺少“\”

我写了一个小脚本如下

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

输入文件“测试”包含以下几行

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

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

Kensington K64391US Ci70 无线
台式机 Nintendo Wii 无线双节棍
M470 DeLonghi HHP1500 云母面板 Vi20
散热器加热器

我怎样才能让“\”出现在输出中?

答案1

使用-r选项read

ksh手册页中:

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

答案2

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

推理: 反斜杠是转义字符。它用于表示“下一个字符应按字面意思处理”,以避免星号之类的符号被误认为不是星号。因此,将两个反斜杠放在一行中会导致第一个反斜杠表示第二个反斜杠应该被用作斜杠。

这对您来说可行吗,或者您是否需要更改脚本本身,而不触及数据?

答案3

在读取时使用 -r:

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

相关内容