2015-03-27 3 views
0

Я использую команду PRINTF войти некоторые значения в файле следующим образом:Printf не печатает линии правильно колотить UNIX

printf "Parameter = $parameter v9_value = $v9_val v9_line = $V9_Line_Count v16_val = $v16_val v16_line = $V16_Line_Count" 

Но выход я получаю следующим образом:

v16_line = 8elayServerPort v9_value = 41 v9_line = 8 v16_val = 4571 

Похоже строка печатается в ротации, а последние значения начинаются с начала.

Ожидаемый выход:

Parameter = RelayServerPort v9_value = 41 v9_line = 8 v16_val = 4571 v16_line = 8 

Но v16_line = 8 переписывается на Parameter = R в строке.

+2

Я думаю, что некоторые из ваших переменных имеют в них возврат каретки, поэтому выход возвращается к началу строки и перезаписывает его. – Barmar

+0

Получаете ли вы эти значения из файла, написанного на компьютере под управлением Windows? – Barmar

+1

Если это так, используйте 'dos2unix', чтобы избавиться от символов CR. – Barmar

ответ

1

printf не добавляет NL на конец. Вы должны добавить \n в конец вашего printf.

Не видя остальной части своей программы или получая значения переменных, трудно сказать, что еще может быть проблемой.

Одна вещь, которую вы можете сделать, - перенаправить свой вывод в файл и посмотреть на этот файл либо через хороший редактор программ, либо с помощью cat -v, который отключает управляющие символы.

Посмотрите, видите ли вы ^M в своем выводе. Если вы это сделаете, возможно, у вас есть ^R в ваших переменных.

Также удалите $v16_val с вашего printf (временно) и посмотрите, выглядит ли ваш результат лучше. Если да, то $v16_val может иметь CR (^M).

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