LINUX.ORG.RU

арифметика в баше


0

1

захотелось сделать конструкцию

sleep 40*60 && ...

не работает, нагуглил «let»

sleep $(let $c=1+2; echo $c)
bash: let: 3=1+2: попытка присвоения не-переменной (error token is "=1+2")
... (спит 3 секунды)

подскажите труЪ-решение или как исправить этот варнинг?

vadim@host3:~$ a=4
vadim@host3:~$ echo $((1 + 2 * $a))
9
geekless ★★ ()

Исправить вариант: sleep $(let c=1+2; echo $c)
Труъ-решение: sleep $((1+2))

Chaoser ★★ ()
Ответ на: комментарий от AITap

епт, чувствовал что все должно быть именно так, но не додумался до двойных скобок

спасибо


а в bc так и не понял - как ему передать данные строкой?

sergey-novikov ★★★ ()
Ответ на: комментарий от sergey-novikov

вообще, поставил манты варить думал поставить на таймер mplayer, чтобы врубил мортал комбат, когда они сварятся

решение:

sleep $((60*40)) && mplayer mortal.mp3

sergey-novikov ★★★ ()
Ответ на: комментарий от sergey-novikov

> а в bc так и не понял - как ему передать данные строкой?

echo 2 + 3 | bc

geekless ★★ ()

В двойных скобках можно и нужно писать переменные в стиле C, без $

a=2
b=1
echo $((a<<b))
Ответ: 4 (побитовый сдвиг 2 на 1 позицию влево)

DRVTiny ★★★★★ ()

Что-то мне подсказывает, что ТСу нужно просто

sleep 40m

jeuta ★★★★ ()

> sleep $(let $c=1+2; echo $c)

bash: let: 3=1+2: попытка присвоения не-переменной (error token is «=1+2»)

Потому что надо sleep $(let c=1+2; echo $c)
Т.е. присваивать надо переменной c, а не его значению

RabidRabbit ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.