2016-09-05 2 views
0

У меня есть этот простой сценарий:странное поведение, когда переменная конкатенации в ShellScript

#!/usr/bin/ksh 

while read param1 param2 
do 
     echo "Parameter1: $param1 - 1" 
     echo "Parameter2: $param2 - 2" 
done <<< "$(list.ksh)" 

Сценарий list.ksh вызывает сервлет Java, а затем возвращает список серверов в этом стиле:

192.168.1.1 server1 
192.168.1.2 server2 

В выходе моего простого сценария я получаю следующий результат:

Parameter1: 192.168.1.1 - 1 
- 2 eter2: server1 
Parameter1: 192.168.1.2 - 1 
- 2 eter2: server2 

Как вы можете видеть, выход echo «Parameter2: $ param2 - 2» - совершенно странная линия. Например, число 2 в конце строки появляется в начале вывода.

Я провел некоторое время, анализируя его, но я ничего не получил.

У вас есть идея? Может быть, выход из податчика приходит с «сломанными» персонажами?

UPDATE:

я мог бы решить эту проблему, после прочтения комментариев/ответ ниже.

Я просто должен был заменить/г/п от сервлета с «/ п» в соответствии со стилем UNIX:

Я сделал это в одной строке:

param2="$(echo $param2 | dos2unix)" 

You можно найти много информации здесь: Remove carriage return in Unix

+1

Сервлет Java возвращает строки, заканчивающиеся парами возврата каретки/возврата. – chepner

+0

Спасибо, chepner. Ты был прав. –

ответ

2

Возможно, выход из податчика поставляется с «сломанными» символами?

Не сломанный само по себе, но это возвращение CRLFs вместо того, чтобы просто ЛФ, который вызывает странный вывод. Разделите CR перед использованием данных.

+0

Извините Ignacio, но что вы подразумеваете под «Strip the CRs»? –

+0

Я мог бы узнать больше об этом, и я понимаю. Я должен был заменить «/ r/n» просто «\ n», в соответствии с стилем unix, и он сработал. Большое спасибо. Я уточню вопрос с помощью решения. –