while shell linux,LINUX实操:shell中while循环的陷阱

《LINUX实操:shell中while循环的陷阱》要点:

本文介绍了LINUX实操:shell中while循环的陷阱,希望对您有用。如果有疑问,可以联系我们。

在写while循环的时候,发现了一个问题,在while循环内部对变量赋值、定义变量、数组定义等等环境,在循环表面失效.

一个简单的测试剧本如下:

#!/bin/bash

echo "abc xyz" | while read line

do

new_var=$line

done

echo new_var is null: $new_var?

执行成果证明,$new_var的成果是空值.在google上查了查,才发现问题出在管道上.

先看看下面的内容.

while循环的写法有好几种,它的语法布局为:

while test_cmd_list; do cmd_list; done

但更经常地,while循环更多地用于读取尺度输入的内容来实现循环.有以下几种写法:

写法一:使用管道通报内容,这是用的最多、但却最烂的写法

echo "abc xyz" | while read line

do

...

done

写法二:

while read line

do

...

done <<< "abc xyz"

写法三:从文件中读取内容

while read line

do

...

done

办法四:采用进程替换

while read var

do

...

done <

办法五:改变标准输入

exec

while read var

do

...

done

尽管写法有多种,但它们并不等价.办法一中使用的是管道符号,这使得while语句在子shell中执行,这意味着while语句内部设置的变量、数组、函数等在循环外部都不再生效.这正是文章开头所说的陷阱.更简单的:echo haha | a=5,在命令执行结束后,变量a的值也不再是5.其余4种写法,while语句都不在子shell中执行,因此都不会出现文章开头所说的问题.

例如,使用写法二的here string取代写法一:

#!/bin/bash

while read line

do

new_var=$line

done <<< "abc xyz"

echo new_var is null: $new_var?

或者使用写法四的过程替换:

#!/bin/bash

while read line

do

new_var=$line

done <

echo new_var is null: $new_var?

由此可以说,在上面的5种写法中,使用的最广泛的写法一虽然最简单、便利,但其实是最烂的一种.

本文永远更新链接地址:

更多LINUX教程,尽在编程之家PHP学院专栏。欢迎交流《LINUX实操:shell中while循环的陷阱》!

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

小编个人微信号 jb51ccc

喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值