Назад | Перейти на главную страницу

«\» Отсутствует в выводе ksh

Я написал небольшой сценарий следующим образом

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

Входной файл «test» имеет следующие строки

Kensington K64391US C \ i70 Wireless
Настольный ПК Nintendo Wii Wireless Nunchuck
\ M470 Панель слюды DeLonghi HHP1500
Нагреватель радиатора Vi \ 20

Но "\" отсутствует в выводе, который выглядит следующим образом

Kensington K64391US Ci70 Wireless
Настольный беспроводной нунчак для Nintendo Wii
M470 DeLonghi HHP1500 Mica Panel Vi20
Нагреватель радиатора

Как я могу получить "\" на выходе?

Использовать -r вариант read.

Из ksh страница руководства:

В исходном режиме -r символ \ не обрабатывается специально.

Что ж, быстрый и простой ответ - заменить все одинарные косые черты во входном файле на двойные. В результате на выходе будет одна косая черта. (например: в vi используйте %s/\\/\\\\/g

Рассуждение: Обратная косая черта - это escape-символ. Он используется, чтобы указать, что «следующий символ следует рассматривать буквально», чтобы такие вещи, как звездочки, не воспринимались как что-либо, кроме звездочки. Таким образом, если поместить два из них в ряд, первый будет означать, что вторую следует использовать как косую черту.

Это приемлемо для вас или вам нужно внести изменения в сам скрипт, не затрагивая данные?

Используйте -r при чтении:

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