回答:
bashを使用している場合は、次のようにパイプではなくhere文字列を使用することをお勧めします。
bc <<< "scale=2;$var1/$var2"
これにより、サブシェルが節約されます。
次に、コマンドの出力を保存するには、コマンド置換を使用します。
answer=$(bc <<< "scale=2;$var1/$var2")
さらにクールなものが必要な場合はbc、DC(逆ポーランド計算機)を使用します。
answer=$(dc <<< "2k $var1 $var2/p")
|の右側のコマンドはサブシェルで実行され、新しいサブシェルを開くにはリソースが必要です(bashの新しいインスタンスを開いてそのコマンドを実行するようなものです)。回避できる場合は、回避してください。ここで、echoto bcをパイピングするとbcサブシェルでコマンドが実行され、何らかの意味で遅延します(攻撃はありません)<<<。
/bin/shは、bashの代わりに(dash)を使用しますが、dashにはありません<<<。
time for i in {1..10000}; do : <<< ""; doneとtime for i in {1..10000}; do echo "" | : ; done、劇的な違いがわかります。それなら、ヒアドキュメントはヒアストリングよりもわずかに高速です。しかし、ワンライナーとして入力する方が厄介です。