2

Есть ли более быстрый способ вычислить в командной строке следующее:

echo "4 * 5" | bc

3 ответа3

4

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" работает быстрее.

2

Я хотел бы добавить решение для оболочки Z, к сожалению, я почти ничего не знаю о рыбе, чтобы я мог адаптировать это для синтаксиса рыбы. Сожалею!

Я определяю функцию c:

function c { echo $@ | bc }

И я установил псевдоним для c , чтобы не происходило глобализации файлов (и я могу опустить кавычки вокруг выражений, особенно включая звездочку:

alias c="noglob c"

Тогда я могу сделать расчеты следующим образом:

$ c 4*5
20
$ c 1.5*2^8
384.0

Это на 3 нажатия клавиши (включая последнее ENTER) больше, чем фактическое выражение для вычисления. Может быть улучшено ... возможно, с помощью сочетаний клавиш.

2

Более общий ответ, чем лучший (в данном случае ) ответ $(( )) - использовать <<<

например, bc <<< "4 * 5" Здесь нам не нужно использовать echo , мы просто отправляем аргумент в stdin.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .