forループを使用してコマンドライン引数を実行しようとしていますが、これを試したことがなく、問題が発生しています。
次のコマンドを使用しています。
for((a=1; a<20; a++));
do
./a.out -N 10000 -D .25*a -E 0.7788007831;
done
cのgetopt関数を使用して値を読み込みます。Dのさまざまな値(出力ではデルタと呼ばれます)を試してみたいと思います。ただし、このコマンドを実行すると、次のようになります。
Acceptance rate is: 0.928400
Estimate is: 0.758704
Error is : 0.020097
Delta used: 0.250000
Acceptance rate is: 0.928400
Estimate is: 0.758704
Error is : 0.020097
Delta used: 0.250000
Acceptance rate is: 0.928400
Estimate is: 0.758704
Error is : 0.020097
Delta used: 0.250000
Acceptance rate is: 0.928400
Estimate is: 0.758704
Error is : 0.020097
Delta used: 0.250000
...
Acceptance rate is: 0.928400
Estimate is: 0.758704
Error is : 0.020097
Delta used: 0.250000
何が問題なのかわかりませんが。
1つは、シェル変数を参照する場合は、$foo
表記を使用する必要があります。a
は文字「a」(同じよう10000
に5桁)ですが$a
、変数にその時点で含まれているものに展開されます。
2つ目は、シェルで算術演算を行うための算術展開の構文は$(( expression ))
であるため、25倍$(( 25 * $a ))
の値を取得するように記述できますa
(基数10の数値として)。
ここで直面する問題は、Bash(およびPOSIXシェル)が整数に対してしか算術演算を実行できないため、を乗算して0.25
も機能しないことです。
zshでは、浮動小数点演算が機能するため、次のように実行できます。
for ((a=1; a<20; a++)); do
echo $((.25 * $a))
done
ただし、Bashまたは標準シェルでは、計算を行うために外部プログラムを使用する必要があります。
for ((a=1; a<20; a++)); do
echo $( echo ".25 * $a" | bc -l )
done
またはあなたのコマンドで:
for ((a=1; a<20; a++)); do
./a.out -N 10000 -D $( echo ".25 * $a" | bc -l ) -E 0.7788007831;
done
もちろん、あなたがしているが、実行中のプログラムは、乗算を行うことができますし、あなただけの文字列を渡したい場合は.25*1
、.25*2
あなたが使用したい、それになど
... -D ".25*$a"
それ以外の場合はファイル名の一致(glob)*
と見なされるため、引用符で囲みます。(実際には、通常、変数展開またはコマンド置換を使用するほとんどの場所を引用符で囲みますが、その上で「二重引用符が必要なのはいつですか?」を参照してください。)
ここに示すシェルで浮動小数点計算を行うには、いくつかの方法があります。bashまたは他の言語/フレームワークで整数と浮動小数点の計算を行う方法は?
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加