Intereting Posts
Что-то не так с пространством в zenity, пытающимся создать скрипт Не удается запустить X-окно, поскольку отчет не может найти действительное устройство фреймбуфера Какие файлы отображаются или выполняются после входа в систему? Выполняет ли dstat захват диска при загрузке ОС? Разрешения базы данных umask на USB-накопителе Обновление емкости SSD – клонов В какую файловую систему включен мой файл? Вывод нескольких строк из нескольких файлов Как сохранить переменные awk в области видимости? Есть ли способ вызвать сообщение, когда команда в / usr / sbin / пытается работать как нерутин? Как найти каталоги, размер которых превышает 4K? Поиск в обратном и прямом направлениях осуществляется с помощью vi-режима в zsh Как установить Linux в систему без CD-ROM и без USB-загрузки? Интеграция примеров соответствия шаблонов в справке mutt Grep определенное слово в одной строке с повторениями

Невозможно использовать параметр 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» для команды «эхо», что я должен сделать, чтобы решить эту проблему?

Если вам нужно использовать 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