2009-06-24 2 views
0

У меня есть две переменные:эхо-печать переменных на одной строке

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 

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

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

ответ

1

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

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

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

2

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

\ r возвращение товара не возможно.

\ n - новая линия.

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

Если вы хотите удалить все те^M вы можете сделать это в Vim о с СЭД с помощью:

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

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

0

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

dos2unix filename 

еще один трюк, чтобы удалить Ctrl + M в редакторе VI:

:%s/^V^M//g 

 Смежные вопросы

  • Нет связанных вопросов^_^