我有以下功能
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变量时会发生。