奇葩问题,for循环的循环变量i不自增

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
yejustme
帖子: 405
注册时间: 2007-04-18 12:08
送出感谢: 0
接收感谢: 2 次
联系:

奇葩问题,for循环的循环变量i不自增

#1

帖子 yejustme » 2019-04-21 12:04

写了个脚本,其中一个函数:
umbrell_loop(){
#执行多个伞形采样
echo '伞形采样' > umbrell_loop.txt
for (( i=1;i<=6;i++ )) ; do
pulldir="pull${i}"
moveGroup=("MV${i}")
fixedPoint=("FX${i}")
umblDir="mv${i}-um" #在rundir目录下,创建的伞型采样的目录名,要与select4umbrella.py一致
umblOut="mv${i}-umout" #在rundir目录下,创建的伞型采样的目录名,要与select4umbrella.py一致
for j in "${mdpName[0]}.mdp" "npt_umbrella.mdp" "md_umbrella.mdp" ; do
sed -e "s/FXX/FX${i}/g" -e "s/MVX/MV${i}/g" $linkmdp/origin.${j} >$linkmdp/$j
done

run_pull
get_distances
umbrella
#wham

if read -p '按任意键以继续,超时300s' -n1 -t 300 any;then
echo '按键以后,电脑继续跑' #每一次运行工作量都很大,让电脑散热一会儿
else
echo '没按键,电脑休息300s'
fi
done
}
调用该函数以后,i不自增,一直等于1,无限循环!!!!!!!!!!!!!!!!!
其中 run_pull get_distances umbrella 是前面已经定义好的函数。
实在没辙了,改用 for i in 1 2 3 4 5 6就一切正常。
既然用 for i in 1 2 3 4 5 6能正常运行,我这里面的其他地方肯定都没有错误。

极为奇葩!!!!!!!
上次由 yejustme 在 2019-04-21 17:27,总共编辑 1 次。
头像
astolia
论坛版主
帖子: 4396
注册时间: 2008-09-18 13:11
送出感谢: 1 次
接收感谢: 737 次

Re: 奇葩问题,for循环的循环变量i不自增

#2

帖子 astolia » 2019-04-21 13:34

有什么奇葩的,是你没弄懂变量的作用域以及 for in 和 for (( )) 的执行方式区别
做个最简单的例子,自己去领悟吧

代码: 全选

a1() {
  i=10
}
a2() {
  local i
  i=10
}
b() {
  for i in 1 2 3; do
    echo $i
    $1
    echo $i
  done
  for (( i=1; i<=3; i++ )) ; do
    echo $i
    $1
    echo $i
  done
}
b a1
b a2
回复

回到 “Shell脚本”