Shell当心for循环中的变量作用域


main(){
  for item in {1..5};do
    echo ${item}
  done
  echo "done"
  func
}

function func(){
  echo ${item}
}

main

上面这段代码,在for循环执行完毕后又执行了一个函数func,但是func居然打印出了item的最后一次的赋值5,说明这里for 中 item定义的是一个全局的变量,
这和我们的认知是不太一样的,理论上item的作用域应该只在main函数中,出了main函数,其他函数应该是不认的。所以这里可能会有坑。

因此比较保险一点的做法是,在for之前先定义一个local的变量item

local item;for item in {1..5};do
    echo ${item}
done

评论