2017-04-25 8 views
0

このスクリプトで間違っていることが見つかりませんでした 変数TimeVecに3つの時間値をすべて設定します。 スクリプトはプログラムループ用のbashで時刻値を追加する

#!/bin/bash 
TIMEFORMAT=%R 
TimeVec="" 
for run in 1 2 3; do(
    exec 3>&1 4>&2 
    foo=$({ time sleep 1 1>&3 2>&4; } 2>&1) 
    exec 3>&- 4>&- 
    TimeVec+=$foo 
    echo $TimeVec 
) 
done 
echo $TimeVec 

の複数の実行時間を節約することになって、これは私が得るものです

1.001 
1.003 
1.003 

私はTimeVec変数は、すべての3つの時間値を格納したい

EDIT。

+0

スクリプトは何をすべきですか?あなたの出力にある3つの項目は何ですか? – Inian

+0

スクリプトは、プログラムの複数の実行時間を保存することになっています。 3つの時間値をすべて格納するTimeVec変数が欲しいです。 – Marouen

+1

配列に値を格納するのはどうですか? stuffを '(...)'に入れると、変数を分離するサブシェルが作成されることに注意してください。 'do ... done'であなたのコマンドを自由にする代わりに、丸い中括弧を使用する理由はありますか? – ghoti

答えて

1

サブシェルでループを実行しているのは、括弧がdo (...) doneであるためです。各反復はそれ自身のサブシェルを得る。

親シェルでTimeVecを使用しますが、子プロセスは親プロセス内の変数を変更できず、それらの間で変数を共有することはできません。したがって、各反復で見られるように、変数は常にnullで始まり​​ます。

関連する問題