Неисправность вычитания Bash: var = $ ((var-1)) дает смешные значения - PullRequest
0 голосов
/ 28 февраля 2019

Сценарий:

#!/bin/bash
var=$1;
while [[ "$var" -ge "0" ]];
do
  echo -ne "$var"\\r;
  var=$((var-1));
  sleep 1;
done

Работает нормально, если я не передам аргумент 10 (то есть var = 10), в этом случае обратный отсчет показывает: 10, 90, 89, 88,... Я также пытался var=$[var-1];и даже пытался сохранить переменную во временном файле и, читая ее оттуда, обновляя ее в цикле, тоже самое странное поведение!Почему он не работает?

Версия для Linux: Debian Wheezy

1 Ответ

0 голосов
/ 28 февраля 2019

Это не сумасшествие.Это способ, которым TTY печатает ваши ценности.Вы отправляете \r код carret return.Таким образом, вы печатаете номер, и каретка перемещается обратно в начало строки.Таким образом, echo печатает 10, 9, 8, .. но это не стирает второй символ.Попробуйте исправить ваш код следующим образом:

echo -ne "$var   "\\r;

и посмотрите на результат.Вы также можете изменить \r на \n и посмотреть, что произойдет тогда.

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