Сначала я сделаю рекомендацию по стилю: используйте $( )
вместо обратных галочек.Они в основном эквивалентны, за исключением того, что они легче для чтения и имеют немного более чистый синтаксис (использование экранированных символов внутри обратных кавычек или вложенных обратных кавычек ... странно).Кроме того, обычно рекомендуется помещать двойные кавычки вокруг ссылок на переменные (например, использовать python3 main.py "$short" "$long" "$ratio"
вместо python3 main.py $short $long $ratio
).
Теперь реальные проблемы: во-первых, вы не можете ставить пробелы вокруг=
в задании, или оно будет проанализировано как нечто совершенно иное.В общем, пробелы являются критическими разделителями в синтаксисе оболочки, и вы не должны ни добавлять, ни удалять их при копировании примеров.
Сравните эти команды:
ratio=0.05
ratio= 0.05
ratio = 0.05
Первый делает то, что выглядитlike - устанавливает переменную ratio
в «0.05».Второй эквивалент ratio='' 0.05
- он пытается запустить «0,05» в качестве команды, с переменной, установленной в пустую строку.Это то, что делает ваш скрипт, поэтому вы получаете сообщение об ошибке «0.05: команда не найдена».Третья команда пытается запустить «ratio» в качестве команды и передать ей аргументы «=» и «0,05».
Вторая проблема заключается в том, что у вас есть канал к bc
вне захвата.Сравните эти команды:
ratio=$(echo "0.05 + 0.05" | bc)
ratio=$(echo "0.05 + 0.05") | bc
Сначала выполняется echo "0.05 + 0.05" | bc
как конвейер, а затем захватывает выходные данные и сохраняет их в переменной ratio
.Это то, что вы хотите.Второй устанавливает ratio
на «0,05 + 0,05» (выход echo "0.05 + 0.05"
), а затем направляет вывод этого (нет) на bc
.Вывод bc
(если он есть) будет выводиться на терминал, а не захватываться.
Таким образом, вы должны заменить каждую строку следующим образом:
ratio= `echo $ratio + $step` | bc
накак то так:
ratio=$(echo "$ratio + $step" | bc)