Bc sonuçları bir değişkene nasıl aktarılır


15

Bir senaryo yazıyorum ve sonuçları bcbir değişkene aktarmak istiyorum . Ben 2 değişken ( var1ve var2) beyan ettim ve onlara değerler verdim . Senaryomda diğer hesaplamalar için çalışabilmem için sonuçları bcbaşka bir değişkene iletmek istiyorum . Şimdiye kadar sonucu aradığım şey olmayan bir dosyaya yazabildim ve ayrıca terminaldeki sonucu yankılayabildim ama sonucu şu anda bir değişkene aktarmak istiyorum. Bu değişkenle çalışabilirim.var3var3

echo "scale=2;$var1/var2" | bc

Yanıtlar:


23

Bash kullanıyorsanız, aşağıdaki gibi bir boru yerine burada bir dize kullanmanız daha iyi olur:

bc <<< "scale=2;$var1/$var2"

Bu size bir alt kabuk kazandıracaktır.

Ardından, bir komutun çıktısını depolamak için komut yerine kullanın:

answer=$(bc <<< "scale=2;$var1/$var2")

Düzenle.

Daha serin bir şey istiyorsanız bc, burada dc (ters cila hesaplayıcısı):

answer=$(dc <<< "2k $var1 $var2/p")

1
Evet bash kullanıyorum, lütfen alt kabuğu netleştirebilir misiniz? Bir dezavantaj var mı?
shaolin

2
Pipoyu her kullandığınızda, borunun |sağındaki komut bir alt kabukta yürütülür ve yeni bir alt kabuk açmak için kaynaklar gerekir (bu komutu yürütmek için yeni bir bash örneği açmak gibi). Bundan kaçınabiliyorsanız, kaçının. Burada bir boru echoiçin bckomutu çalışacaktır bcbash harika burada-string yapısını sahip olduğundan bir kabuktaki ve, bazı anlamda, (suç) zekalı <<<bunlar gibi aptalca şeyler önlemek için.
gniourf_gniourf

@gniourf_gniourf Daha sonra, eğer kaynak kullanımını önemsiyorsanız /bin/sh, bash yerine (dash) kullanırsınız, ancak dash içermez <<<.
Gilles 'SO- kötü olmayı kes'

Yardımcı bilgiler için teşekkürler !! Bu, kaynakların ve alt kabukların korunmasına ilişkin iyi bir bilgidir. Girdiğiniz için çok teşekkür ederim.
shaolin

1
@Gilles sadece karşılaştırmak time for i in {1..10000}; do : <<< ""; doneile time for i in {1..10000}; do echo "" | : ; donebir dramatik farkı göreceksiniz. Öyleyse haklısın, bir yorumlu yorum bir yorumdan biraz daha hızlı. Ancak bir astar olarak yazmak daha garip.
gniourf_gniourf

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.