if ($answer_counter == 1): ?>
endif; ?>
Арифметика Bash
Другим возможным решением является добавление простой функции для встроенной арифметики Bash. Поместите это в файл .bashrc
, чтобы попробовать:
=() {
echo "$(([email protected]))"
}
Итак, теперь вам больше не нужно $((...))
, просто =
, которое кажется достаточно естественным.
Замена
Еще одна вещь, если вы хотите быть еще быстрее: вы можете заменить p
+
и x
на *
. Это будет работать для этого:
=() {
local IFS=' '
local calc="${*//p/+}"
calc="${calc//x/*}"
echo "$(($calc))"
}
= 5 x 5 # Returns 25
= 50p25 # Returns 75
Теперь вам больше не нужно Shift , единственная вещь =
перед арифметикой.
Шестнадцатеричный вывод
Выход может отображаться как десятичным, так и шестнадцатеричным, если это необходимо. ( Примечание : использование замены x
будет конфликтовать с синтаксисом 0x...
hex)
=() {
local answer="$(([email protected]))"
printf '%d (%#x)\n' "$answer" "$answer"
}
Пример:
$ = 16 + 0x10
272 (0x110)
$ = 16**3 + 16**4
69632 (0x11000)
Использование bc
Если вы хотите немного более продвинутые вычисления, вы можете передать его на bc
следующим образом:
=() {
local IFS=' '
local calc="${*//p/+}"
calc="${calc//x/*}"
bc -l <<<"scale=10;$calc"
}
= 'sqrt(2)' # Returns 1.4142135623
= '4*a(1)' # Returns pi (3.1415926532)
Функции, предоставляемые bc
, следующие (и могут быть найдены из man bc
):
sqrt ( expression )
The value of the sqrt function is the square root of the expression.
If the expression is negative, a run time error is generated.
s (x) The sine of x, x is in radians.
c (x) The cosine of x, x is in radians.
a (x) The arctangent of x, arctangent returns radians.
l (x) The natural logarithm of x.
e (x) The exponential function of raising e to the value x.
j (n,x)
The Bessel function of integer order n of x.
Он также поддерживает if
, for
, while
и переменные, такие как язык программирования, хотя, возможно, лучше писать в файл, если вы этого хотели.
Имейте в виду, что он заменит p
и x
на имена функций / переменных. Может быть, лучше просто удалить замены.
Использование gcalccmd
Вы также можете вызвать вызов функции gcalccmd
(из gnome-calculator
) следующим образом:
=() {
local IFS=' '
local calc="$*"
# Uncomment the below for (p → +) and (x → *)
#calc="${calc//p/+}"
#calc="${calc//x/*}"
printf '%s\n quit' "$calc" | gcalccmd | sed 's:^> ::g'
}
= 'sqrt(2)' # Returns 1.4142135623
= '4^4' # Returns 256
Доступные функции, по-видимому, (взяты прямо из исходного кода ), ==
обозначает эквивалентные функции:
ln()
sqrt()
abs()
int()
frac()
sin()
cos()
tan()
sin⁻¹() == asin()
cos⁻¹() == acos()
tan⁻¹() == atan()
sinh()
cosh()
tanh()
sinh⁻¹() == asinh()
cosh⁻¹() == acosh()
tanh⁻¹() == atanh()
ones()
twos()