Печать на выходе

#bash #echo

#bash #эхо

Вопрос:

Когда я использую следующие операторы echo, я получаю хороший результат, который и ожидался от таких трех отдельных операторов echo:

 echo AP $macaddr
echo noise floor $noise
echo $channel
  

Вывод:

 AP ac:67:06:30:eb:00,
noise floor -96
channel=1
  

Но когда я меняю все три в один оператор ‘echo’, подобный следующему, вывод прерывается.

 echo AP $macaddr noise floor $noise $channel
  

Вывод:

 channel=06:30:eb:00, noise floor -96
  

В этом выводе я не вижу канала, а MAC-адрес отсутствует в двух его первых октетах.
Что является причиной этого? Как этого избежать?

Комментарии:

1. Это не имеет смысла. Почему channel должно быть напечатано первым во второй команде?

Ответ №1:

Я не знаю, откуда берется канал, но есть ли ложное ‘CR’ в начале значения $ channel или в конце $ noise? Попробуйте выполнить:

 channel=`echo $channel | tr -d 'r'`
noise=`echo $noise | tr -d 'r'`
echo AP $macaddr noise floor $noise $channel
  

… и посмотрим, имеет ли это значение. В противном случае посмотрите, есть ли какие-либо другие сомнительные символы в $ channel и $ noise (и любой из других переменных):

 echo $channel | od -t c
  

и если они есть, используйте tr -d , чтобы удалить их из переменной.

Ответ №2:

У вас есть возврат каретки в конце $noise , поэтому выходные данные ' channel=0' (обратите внимание на начальный пробел) перезаписываются 'AP ac:67:0' .