为什么需要睡眠? KSH /庆典

时间:2016-01-26 23:16:24

标签: bash shell ksh

我有以下功能

get_previous_term() {
@var term=$1
@var centry=${term:0:2}
@var year=${term:2:2}
@var semester=${term:4:2}

case $semester in
    10)
    semester=$((semester+30))
    year=$((year-1))
    ;;
    # years stay the same
    20)
    semester=$((semester-10))
    ;;
    30)
    semester=$((semester-10))
    ;;
    40)
    semester=$((semester-10))
    ;;
    *)
    error_exit "Unknown Term $term"
    ;;
esac;
@var prev_term=$((centry))$((year))$((semester))
echo $prev_term
}

get_n_terms_ago() {
@var term=$1
@var counter=$2
@var tmp=$term
@var i=0
while [ $i -lt $counter ]; do
    tmp=$(get_previous_term $term)
    term=$tmp
    i=$((i+1))
done;
echo $term
}

(@var只是排版(oo-bashframework的一部分))

现在的问题是这个。假设我希望从201610这样的术语中获得以前的3个术语。

   current_term="201610"
   previous_term=$(get_previous_term $current_term)
   previous_2_term=$(get_n_terms_ago $current_term 2)
   previous_3_term=$(get_n_terms_ago $current_term 3)

如果我自己设置一个变量,它可以正常工作。如果我按顺序执行它们,我将得到一个未找到的命令(来自shell)。通过在变量赋值之间使用sleep,我能够可靠地工作。实施例

   current_term="201610"
   previous_term=$(get_previous_term $current_term)
   sleep 1;
   previous_2_term=$(get_n_terms_ago $current_term 2)
   sleep 2;
   previous_3_term=$(get_n_terms_ago $current_term 3)
   sleep 1;

我不确定发生了什么事? $()会产生另一个shell吗? shell不应该等待上一个命令完成吗? (如果我省略第一次睡眠(即使我使用get_n_terms_ago,其中n为1)我也不会有问题。似乎在设置2/3变量时会发生。

0 个答案:

没有答案