Невозможно использовать параметр echo в файле сценария оболочки

Мой ш-баш. Мне нужен индикатор прогресса процентиля для моего цикла 0 ~ 9999 'для'. Поэтому я использую эти строки в цикле, но вывод очень странный.

#!/bin/bash declare -i percentile for((i=0;i<=9999;i++)) do percentile=($i+1)%100 if [ "$percentile" == 0 ];then echo -ne $((($i+1)/100))\%\r fi done echo -n '\n' 

Я хочу видеть, что он выводит «1%», а затем заменяет эту строку «2%» и «3%» … но не «1%», «2%», «3%», … построчно.

После выполнения этого .sh-файла то, что отображается на терминале,

 -ne 1%r -ne 2%r -ne 3%r -ne 4%r -ne 5%r -ne 6%r -ne 7%r -ne 8%r -ne 9%r -ne 10%r ... 

Баш просто не распознал параметр «-ne» и escape-команду «\ r» для команды «эхо», что я должен сделать, чтобы решить эту проблему?

2 Solutions collect form web for “Невозможно использовать параметр echo в файле сценария оболочки”

Если вам нужно использовать echo , попробуйте с цитированным возвратом, т. Е. '\r' , а не только \r . Целая строка:

 echo -ne $((($i+1)/100))\%'\r' 

И посмотрите, почему printf лучше, чем эхо?

Я не думаю, что вы используете bash потому что оба флага -n и -e обычно понимаются утилитой echo bash .

Убедитесь, что вы запустили скрипт, явно указав bash в качестве интерпретатора,

 $ bash ./script.sh 

или, делая его исполняемым и запуская его,

 $ chmod +x ./script.sh $ ./script.sh 

Арифметические операции в скрипте также неверны (при вычислении percentile ). bash выполняет арифметические подстановки в $(( ... )) и арифметическую оценку в (( ... )) .

Вот альтернативная реализация:

 iter=70500 for(( i = 1; i <= iter; i++ )); do if ! (( i % (iter/100) )); then printf '\r%d%%' "$(( (100*i)/iter ))" fi done echo 
  • Выделение строки без кавычек
  • Как создать файл с несколькими строками из командной строки?
  • Транспортировка данных в FIFO с помощью EOFs каждую секунду
  • Как я могу правильно обосновать выход переменной длины?
  • Как бы я запустил эту команду?
  • Использование разделителя табуляции в срезе в Unix Shell Scripting
  • Как остановить «grep» от вырезания трубы
  • Почему эхо игнорирует мои кавычки?
  • Вернуться к спине Трубы в команду
  • эхо для вывода на печать
  • Есть ли разница между двойным цитированием переменной или целой строкой в ​​эхо
  • Linux и Unix - лучшая ОС в мире.