在子shell中设置变量

时间:2016-03-22 16:22:46

标签: bash sh

我有一个这样的脚本可以正常工作:

#!/bin/bash

INBOUND=$(echo '5')
OUTBOUND=$(echo '10')

TOTAL=$(($INBOUND+$OUTBOUND))

echo "IN:$INBOUND OUT:$OUTBOUND T:$TOTAL"

输出:IN:5 OUT:10 T:15

现在假设代替echo 5echo 10我有两个命令,每个命令需要10秒才能运行。

我不希望我的脚本运行10 + 10秒,因此我尝试为每个变量使用两个子流程。

我以为会工作:

#!/bin/bash

INBOUND=$(echo '5') &
OUTBOUND=$(echo '10')
wait
TOTAL=$(($INBOUND+$OUTBOUND))

echo "IN:$INBOUND OUT:$OUTBOUND T:$TOTAL"

但第一个变量没有得到值,输出为:IN: OUT:10 T:10

如何在单独的进程中设置每个var,因此脚本在10秒内运行而不是10 + 10?

1 个答案:

答案 0 :(得分:2)

您需要使用(临时)文件。

inbound_result=$(mktemp)
outbound_result=$(mktemp)
echo '5' > "$inbound_result" &
echo '10' > "$outbound_result" &
wait
read inbound < "$inbound_result"
read outbound < "$outbound_result"
total=$((inbound + outbound))

echo "IN: $inbound OUT:$outbound T:$total"