#linux #bash
Возникла необходимость перевести секунды в милисекунды. Скрипт: #!/bin/bash a=$(ffprobe -i c848a39afc54e04cc64ddd955686654b9b1c6f31 -show_entries format=duration -v quiet -of csv="p=0"); b=1000; result=$(($a*$b)); echo $result Вывод ./sectomilisec: line 4: 23.760000*1000: syntax error: invalid arithmetic operator (error token is ".760000*1000") Как правильно умножить вывод операции на число?
Ответы
Ответ 1
invalid arithmetic operator (error token is ".760000*1000") в программе bash не реализована арифметика с плавающей точкой (только целочисленная). для осуществления таких вычислений придётся воспользоваться какой-то другой программой. например, bc: result=$(echo "$a*$b" | bc -l) или dc: result=$(echo "$a $b + p" | dc) подробности: bc: википедия, man bc, info bc dc: википедия, man dc, info dc. кстати, в этом выражении знаки доллара перед именами переменных не нужны: result=$(($a*$b)) достаточно (и более правильно) так: result=$((a*b))Ответ 2
Правильная операция умножения выполняется вот так echo $[$a*$b] echo $[5*10] Если нужно умножать целое на вещественное то требуется выполнить команду result=$(echo "scale=4; $a*$b" | bc) scale - точность
Комментариев нет:
Отправить комментарий