在bash for循环中追加时间值

时间:2017-04-25 12:41:41

标签: bash shell

我在这个剧本中找不到我做错的事, 我希望变量TimeVec具有所有三个时间值。 该脚本应该可以节省程序的多个运行时间

#!/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变量存储所有三个时间值。

1 个答案:

答案 0 :(得分:1)

由于do ( ... ) done中的括号,您正在子shell中运行循环。每次迭代都有自己的子shell。

您希望在父shell中使用TimeVec,但子进程无法修改其父进程中的变量,并且它们无法在它们之间共享变量。因此,每次迭代都可以看到变量始终为null。