Переменные перезаписывают текстовые проблемы с "эхо" в Bash - PullRequest
4 голосов
/ 10 декабря 2010

Я использую OS X 10.6.5, Bash.

Когда я запускаю это:

echo $IP; echo of; echo $IPLINES

Я получаю этот вывод:

219.80.4.150:3128
of
1108

Когда я запускаю это:

echo $IP of $IPLINES

Я получаю этот вывод:

 of 1108.150:3128

Я ожидал получить:

219.80.4.150:3128 of 1108

Что вызвало бы искаженный вывод, который я получаю?

Фактический сценарий таков:

#!/bin/bash

IPLINES=`cat a.txt | wc -l | awk '{print $1}'`

if [ $IPLINES > 1 ]; then
    LINE=`expr $RANDOM % $IPLINES + 1`
    IP=`head -$LINE a.txt | tail -1`
    sed -e "${LINE}d" -i .b a.txt

    echo $IP of $IPLINES
fi

Ответы [ 2 ]

11 голосов
/ 10 декабря 2010

Здесь дикая догадка: вы извлекаете переменную IP из файла .txt - если это файл Windows или кодируется в стиле Windows, строки заканчиваются на \r\n. Вы убираете новую строку, но что, если в ней есть \r, которая заставляет вас вернуться к началу строки?

Быстрое грязное исправление без вопросов: используйте echo -n, оно подавляет перевод строки в конце отображаемого текста.

echo -n $IP; echo -n of; echo -n $IPLINES

Если проблема не устранена, возможно, это то, что я сказал выше. Попробуйте обрезать вправо $IP.

РЕДАКТИРОВАТЬ: не видел OSX часть, извините. В OSX строки заканчиваются на \r - это должно быть проблемой.

2 голосов
/ 10 декабря 2010

Может показаться, что в конце $IP.

есть возврат каретки (\r).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...