Laboratuvar deneyimize girdi sağlamak için bir seri terminal kullanıyorum. Bunu kullanarak buldum
$ echo "5X5"
sadece bir dizi döndürür "5X5"
. Çarpma işlemini yürütmek için bir komut var mı?
Laboratuvar deneyimize girdi sağlamak için bir seri terminal kullanıyorum. Bunu kullanarak buldum
$ echo "5X5"
sadece bir dizi döndürür "5X5"
. Çarpma işlemini yürütmek için bir komut var mı?
Yanıtlar:
Evet, bazı basit matematik işlemleri yapmak için bash'ın yerleşik Aritmetik Genişletmesini$(( ))
kullanabilirsiniz.
$ echo "$((5 * 5))"
25
Bash Referans Kılavuzundaki Kabuk Aritmetiği bölümünü kontrol edin operatörlerin tam listesi için.
Tamlık uğruna, diğerlerinin de belirttiği gibi, keyfi bir hassasiyete ihtiyacınız varsa, bc
yoksa dc
daha iyi olur.
Bash destekleyen aritmetik ile $(( expression ))
. Örneğin:
$ echo $(( 5 * 5 ))
25
Bir dizi yardımcı program, bc ve ifade de dahil olmak üzere aritmetik sağlar .
$ echo '5 * 5' | /usr/bin/bc
25
$ /usr/bin/expr 5 \* 5
25
Klasik çözüm şudur:
expr 5 \* 5
Bir başka güzel seçenek ise:
echo 5 5\*p | dc
Bu çözümlerin her ikisi de yalnızca tamsayı işlenenlerle çalışacaktır.
k
. Varsayılan kesinliğin 0 olduğunu kesinlikle hatırlıyorum (tamsayıya kısaltma). Yanlış hatırlıyor muyum yoksa sadece yeni uygulamalar davranışı değiştirdi mi?
dc
Daha cebirsel ve daha az RPN olduğum için yıllardır nadiren kullandım , bu yüzden hatırlamıyorum. Kullandığım bir GNU sisteminde varsayılan değer 0'dır. Eski (1993) bir FreeBSD man
sayfası varsayılanın sıfır olduğundan bahseder, ancak eski BSD man
sayfaları bunu yapmaz.
echo '4 k 50.5 7 / p' | dc
çalışır (çıktı:) 7.2142
.
bc
Kayan nokta hesaplamalarını kullanan ve dolayısıyla destekleyen bu işlevi kullanıyorum :
c () {
local a
(( $# > 0 )) && a="$@" || read -r -p "calc: " a
bc -l <<< "$a"
}
Misal:
$ c '5*5'
25
$ c 5/5
1.00000000000000000000
$ c 3.4/7.9
.43037974683544303797
Bash'in aritmetik genişlemesi kayan sayıları desteklemez (ancak Korn kabuğu ve zsh bunu destekler).
Misal:
$ ksh -c 'echo "$((3.0 / 4))"'
0.75
Bunun için kullandığım basit bir komut dosyam var:
me@mycomputer:~$ cat /usr/local/bin/c
#!/bin/sh
echo "$*" | sed 's/x/\*/g' | bc -l
Bu değişiklikler x
için *
çünkü *
kabuğunda özel bir karakterdir. Aşağıdaki gibi kullanın:
c 5x5
c 5-4.2 + 1
c '(5 + 5) * 30'
(ifade parantez içeriyorsa yine de tırnak işareti kullanmanız gerekir).tr
birden çok karakter için karakter eşlemesi yapmak için kullanılabilir.
Python'u seviyorsanız ve bir paket yükleme seçeneğiniz varsa, benim yaptığım bu yardımcı programı kullanabilirsiniz .
# install pythonp
python -m pip install pythonp
pythonp "5*5"
25
pythonp "1 / (1+math.exp(0.5))"
0.3775406687981454
# define a custom function and pass it to another higher-order function
pythonp "n=10;functools.reduce(lambda x,y:x*y, range(1,n+1))"
3628800
dc
şamandıralarla çalışır. Deneyinecho '4 k 50 7 / p' | dc
. Çıktı7.1428
.k
Komut hassasiyet ayarlar.