質問: バッシュの乗算と加算 for k in {0..49}; do a=$(($((2*$k))+1)); echo $a; done こんにちは、3行目の簡略化された式が必要です。コマンド置換を使用しない式の可能性があります。
回答: 算術展開を使用する:for (( k = 0; k < 50; ++k )); do a=$(( 2*k + 1 )) echo "$a" done 時代遅れのexprユーティリティを使用する:for (( k = 0; k < 50; ++k )); do a=$( expr 2 '*' "$k" + 1 ) echo "$a" done bc -lの使用(この場合、数学関数は使用されないため、-lは実際には必要ありません):for (( k = 0; k < 50; ++k )); do a=$( bc -l <<<"2*$k + 1" ) echo "$a" done bc -lをコプロセスとして使用する(バックグラウンドで一種の計算サービスのように動作します1):coproc bc -l for (( k = 0; k < 50; ++k )); do printf "2*%d + 1\n" "$k" >&${coproc[1]} read -u "${coproc[0]}" a echo "$a" done kill "$coproc_pid" 最後のものはksh93で(おそらく)よりクリーンに見えます:bc -l |& bc_pid="$!" for (( k = 0; k < 50; ++k )); do print -p "2*$k + 1" read -p a print "$a" done kill "$bc_pid" 1これにより、ループ内で大量の入力を処理する必要があった問題がかつて解決しました。処理にはいくつかの浮動小数点計算が必要でしたが、ループでのbcの数回の生成は非常に遅いことが判明しました。はい、他の方法で解決することもできましたが、退屈でした...