Bash变量范围

前端之家收集整理的这篇文章主要介绍了Bash变量范围前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
请向我解释为什么最后的“echo”语句是空白的?我期望它在while循环中增加到值1:
  1. #!/bin/bash
  2. OUTPUT="name1 ip ip status" # normally output of another command with multi line output
  3.  
  4. if [ -z "$OUTPUT" ]
  5. then
  6. echo "Status WARN: No messages from SMcli"
  7. exit $STATE_WARNING
  8. else
  9. echo "$OUTPUT"|while read NAME IP1 IP2 STATUS
  10. do
  11. if [ "$STATUS" != "Optimal" ]
  12. then
  13. echo "CRIT: $NAME - $STATUS"
  14. echo $((++XCODE))
  15. else
  16. echo "OK: $NAME - $STATUS"
  17. fi
  18. done
  19. fi
  20.  
  21. echo $XCODE

我试过使用下面的语句,而不是XCODE方法

  1. XCODE=`expr $XCODE + 1`

并且它也不会在while语句之外打印。我想我缺少一些关于变量范围在这里,但是人的页面不显示它。

因为你是管道到while循环,创建一个子shell来运行while循环。
现在这个子进程有它自己的环境副本,不能通过任何
变量回到其父(如在任何unix进程中)。

因此,你需要重组,以便你不会陷入循环。
或者,你可以在一个函数中运行,例如,回显你的值
想从子进程返回。

http://tldp.org/LDP/abs/html/subshells.html#SUBSHELL

猜你在找的Bash相关文章