Есть ли более быстрый способ вычислить в командной строке следующее:
echo "4 * 5" | bc
POSIX-совместимые оболочки (dash
ksh
bash
zsh
и многие другие)
Для этого есть встроенный метод. Используйте конструкцию $(())
для этого:
echo $((4 * 5))
Он не вызывает никаких функций, поэтому он быстрее.
Давайте сравним способы (zsh
):
$ time ( echo "4 * 5" | bc )
20
( echo "4 * 5" | bc; ) 0.00s user 0.00s system 61% cpu 0.007 total
$ time ( echo $((4 * 5)) )
20
( echo $((4 * 5)); ) 0.00s user 0.00s system 48% cpu 0.001 total
Тем не менее, $(())
имеет много ограничений и может выполнять только основные арифметические операции.
C снарядов (csh
tcsh
)
Я не думаю, что в C Shell есть решение с одним выражением. Тем не менее, можно сделать следующее:
@ i = 4 * 5 ; printf "$i\n"
Рыба
Возможно, math "4 * 5"
работает быстрее.
Я хотел бы добавить решение для оболочки Z, к сожалению, я почти ничего не знаю о рыбе, чтобы я мог адаптировать это для синтаксиса рыбы. Сожалею!
Я определяю функцию c
:
function c { echo $@ | bc }
И я установил псевдоним для c
, чтобы не происходило глобализации файлов (и я могу опустить кавычки вокруг выражений, особенно включая звездочку:
alias c="noglob c"
Тогда я могу сделать расчеты следующим образом:
$ c 4*5
20
$ c 1.5*2^8
384.0
Это на 3 нажатия клавиши (включая последнее ENTER
) больше, чем фактическое выражение для вычисления. Может быть улучшено ... возможно, с помощью сочетаний клавиш.
Более общий ответ, чем лучший (в данном случае ) ответ $(( ))
- использовать <<<
например, bc <<< "4 * 5"
Здесь нам не нужно использовать echo
, мы просто отправляем аргумент в stdin.