эхо-печать переменных в одну строку - PullRequest
0 голосов
/ 25 июня 2009

У меня есть две переменные:

export portNumber=8888^M
export loginIP_BASE=10.1.172.2^M

Я пытаюсь вывести их обоих в одну строку, разделенную двоеточием ':'. Это должно выглядеть как "10.1.172.2:8888"

echo -n 'Login IP:'
echo -n $loginIP_BASE
echo -n ':'
echo $portNumber

но вместо этого он печатает:

:8888 IP:10.1.172.2

Почему он это делает? Как я могу заставить его делать то, что я хочу?

Кроме того, переменные уже существуют в другом файле, поэтому я не писал их сам. Что делает "^ M"?

Ответы [ 3 ]

2 голосов
/ 25 июня 2009

В Windows типичной новой строкой является \ r \ n (в * nix системах просто \ n).

\ r - возврат каретки.

\ n - новая строка.

^ M равно \ r , поэтому после записи $ loginIP_BASE вы находитесь в позиции 0 фактической строки.

Если вы хотите удалить все эти ^ M, вы можете сделать это в vim o с помощью sed:

sed s/{ctrl+v}{ctrl+m}// file > new_file

({Ctrl + v} означает нажать Ctrl, а затем v)

1 голос
/ 25 июня 2009

Файл был передан из Windows в двоичном режиме и по-прежнему содержит символы возврата каретки на концах строк.

Это ваши ^M символы, и они заставляют позицию текста возвращаться к началу строки, когда отображаются значения - возврат каретки в конце первого значения приводит к отображению второго значения в начале строки, перезаписывая часть первого значения.

Правильное исправление - это передача файла из Windows с помощью переноса в текстовом режиме или запуск dos2unix для файла после его передачи. (Или если файл не будет перенесен из Windows снова, просто удалите символы ^M!)

0 голосов
/ 27 октября 2017

Используйте команду dos2unix:

dos2unix filename

Еще один трюк для удаления Ctrl + M в редакторе vi:

:%s/^V^M//g
...