简单的bash脚本:有什么问题



我可以看到:

#uname -a
Linux grosella 3.13.0-48-generic #80-Ubuntu SMP Thu Mar 12 11:16:15 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
在这样
1 AAAA
2 BBBB
3 CCCC
4 DDDD
5 EEEE
6 FFFF

运行以下bash脚本:

typeset -i ACUM=0
typeset -a V=('')
cat /tmp/data.txt | 
while read LINEA ; do
  [ "x$LINEA" == "x" ] && break
  V=( $LINEA )
  VAL="${V[0]}"
  [ "x$VAL" == "x" ] && continue
  [[ $VAL =~ ^[0-9]+$ ]] || continue
  ((ACUM+=VAL))
  echo -e "VAL=$VALttACUM=$ACUM"
done
echo -e "nFinal Result: $ACUM"

这是印刷输出:

VAL=1       ACUM=1
VAL=2       ACUM=3
VAL=3       ACUM=6
VAL=4       ACUM=10
VAL=5       ACUM=15
VAL=6       ACUM=21
Final Result: 0

而不是21,最终结果是0。

当您将数据插入时循环时,该循环会创建一个the loop运行的子壳。子壳不能更改父的环境变量,因此外部ACUM不会更改。

更改您的代码
cat /tmp/data.txt | 
while read LINEA ; do
  # ...
done

to

while read LINEA ; do
  # ...
done < /tmp/data.txt

避免具有自己环境的两个子壳。

相关内容

  • 没有找到相关文章