異なる引数を使用してプログラムを複数回実行するように中括弧を拡張する

異なる引数を使用してプログラムを複数回実行するように中括弧を拡張する

私は中かっこ拡張について学び、それを利用して別のコマンドライン引数を使用して同じC ++プログラムを起動できることを願っています。

端末で実行されるコードは次のとおりです。

mpirun -n 1 main.exe 1 10 0.1 1 5

main.exeの後の数字は私のプログラムの入力パラメータです。

私はこのようなことをしたい:

mpirun -n 1 main.exe 1 10 {0.1,0.2} 1 5

コードを2回実行したいです。一度は0.1で、一度は0.2を3番目の引数として使用したいと思います。

うまくいかない理由と回避策は何ですか?

最高

ベストアンサー1

いいえ、動作しません。このコマンドを実行すると、支柱の拡張が拡張されます。中かっこ拡張だけが影響を受け、複数のコマンドを実行しません。あなたの場合は次のとおりです。

mpirun -n 1 main.exe 1 10 {0.1,0.2} 1 5

単に次のようになります。

mpirun -n 1 main.exe 1 10 0.1 0.2 1 5

別の値で 2 回実行するには、次のようにします。

for i in {0.1,0.2}; do
    mpirun -n 1 main.exe 1 10 "$i" 1 5
done

それが実行されます。

mpirun -n 1 main.exe 1 10 0.1 1 5

続いて

mpirun -n 1 main.exe 1 10 0.2 1 5

もちろん、この特別なケースでは、支柱の拡張は不必要に複雑なので、次のことを行う必要があります。

for i in 0.1 0.2; do
    mpirun -n 1 main.exe 1 10 "$i" 1 5
done

このような内容を理解するのに役立つ方法は、set -x(bashを使用していると仮定して)実際に実行されたコマンドを表示することです。

$ set -x
$ mpirun -n 1 main.exe 1 10 {0.1,0.2} 1 5
+ mpirun -n 1 main.exe 1 10 0.1 0.2 1 5
[. . .]

を使用して再びドラッグできますが、set +xシェルが複雑なコマンドをどのように拡張するかを正確に確認し、実際に実行されている内容を確認できます。

おすすめ記事