У меня есть этот простой сценарий:странное поведение, когда переменная конкатенации в 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
Сервлет Java возвращает строки, заканчивающиеся парами возврата каретки/возврата. – chepner
Спасибо, chepner. Ты был прав. –