免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: Dannysd
打印 上一主题 下一主题

shell中引用while中的变量 [复制链接]

论坛徽章:
6
酉鸡
日期:2013-11-04 15:30:02巳蛇
日期:2014-01-23 10:36:23双鱼座
日期:2014-01-23 13:08:332015亚冠之鹿岛鹿角
日期:2015-09-03 14:36:002015亚冠之武里南联
日期:2015-09-18 10:48:1315-16赛季CBA联赛之山西
日期:2016-05-05 00:05:33
11 [报告]
发表于 2012-02-09 09:34 |只看该作者
回复 10# yinyuemi


    多谢,yinyuemi回复

    此方法不是不可,只是我觉得前提条件是  < 后面的内容必须是确定的

   昨天的问题是暂时通过一个临时文件来解决的

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
12 [报告]
发表于 2012-02-09 11:51 |只看该作者
回复 6# yinyuemi


    这种实在是看不太明白,我一般都回避这种办法,能给详细解释下不。?

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
13 [报告]
发表于 2012-02-09 13:33 |只看该作者
回复 12# expert1
  1.     mkfifo pipe; # 创建一个名为pipe的命名管道, 有时根据需求可以加 -m选项设置权限.
  2.     exec 3<>pipe;  #fd3 指向pipe,

  3.     echo "a b c" |while read line1 line2
  4.     do
  5.     echo $line1 >&3 # 写入fd3,因为fd3指向pipe,也就是写入pipe
  6.     done

  7.     read -u3 var # read -u fd  Read input from file descriptor fd.
  8.     echo $var
  9.     rm pipe;
  10.     exec 3>&-  # 关闭fd3

复制代码

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
14 [报告]
发表于 2012-02-09 13:46 |只看该作者
回复 13# yinyuemi


    fd3 做什么用?为啥要fd呢?这个while外边读取不到sum的值是吧,为啥

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
15 [报告]
发表于 2012-02-09 14:00 |只看该作者
回复 14# expert1


    如果用管道|,传给while循环的话,后者是子进程,没办法改变父进程的变量.
    fd 3 可以看作为一个临时的中转文件, 可以实现将子进程的变量值传给父进程.

论坛徽章:
0
16 [报告]
发表于 2012-02-12 11:58 |只看该作者
回复 14# expert1

fd3就相当于一个中间的文件描述符,它指向的是管道,这样就解决了子进程的问题这个其实和临时文件是一样的,只不过临时文件的方法的缺点就是多了一个文件……
   

论坛徽章:
0
17 [报告]
发表于 2012-02-12 11:59 |只看该作者
回复 11# Dannysd


    临时文件的方法挺好的……

论坛徽章:
6
酉鸡
日期:2013-11-04 15:30:02巳蛇
日期:2014-01-23 10:36:23双鱼座
日期:2014-01-23 13:08:332015亚冠之鹿岛鹿角
日期:2015-09-03 14:36:002015亚冠之武里南联
日期:2015-09-18 10:48:1315-16赛季CBA联赛之山西
日期:2016-05-05 00:05:33
18 [报告]
发表于 2012-02-12 12:56 |只看该作者
回复 17# xiaopan3322


    脚本后面加一句 rm -f file就行了,也还好
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP