想着定义个全局变量,用sh 函数修改,结果遇到了管道的坑,先贴错误代码:

#!/bin/shHEIGHT="null"
WIDTH="default"
SRC_YUV=
DEST_DIR=
MAX_QP=
MIN_QP=read_para_from_file(){cat $1 | while read line  ##划重点--->管道的最后一个命令都是在子Shell中执行的。这意味着在子Shell中赋值的变量对父Shell是无效的。所以当我们将管道输出传送到一个循环结构,填入随后将要使用的变量,那么就会产生很多问题。一旦循环完成,其所依赖的变量就不存在了。doecho $linet_name=`echo $line |awk -F ' ' '{print $1}'`t_value=`echo $line |awk -F ' ' '{print $2}'`echo "k-v :$t_name -> $t_value"if [ $t_name = "width" ] ; thenecho "1 ->"$WIDTHWIDTH=$t_valueecho "1 ->"$WIDTHcontinuefiif [ $t_name = "height" ] ; thenecho "2 ->"$HEIGHTHEIGHT=$t_valueecho "2 ->"$HEIGHTcontinuefiif [ $t_name = "src_yuv" ] ; thenSRC_YUV=$t_valueecho "3 ->"$SRC_YUVcontinuefiif [ $t_name = "dest_dir" ] ; thenDEST_DIR=$t_valueecho "4"continuefiif [ $t_name = "max_qp" ] ; thenMIN_QP=$t_valueecho "5"continuefiif [ $t_name = "min_qp" ] ; thenMAX_QP=$t_valueecho "6"continuefiecho "get nothing -> "$linedone
}
show_global_para(){echo "show global var ->"echo "WIDTH -> $WIDTH"echo "HEIGHT -> $HEIGHT"echo "SRC_YUV -> $SRC_YUV"echo "DEST_DIR -> $DEST_DIR"echo "MAX_QP -> $MAX_QP"echo "MIN_QP -> $MIN_QP"
}read_para_from_file $1
show_global_para

while read line命令从管道中输出中读取数据。注意,while是管道的最后一个命令,将在子Shell中运行。

管道的最后一个命令都是在子Shell中执行的。这意味着在子Shell中赋值的变量对父Shell是无效的。所以当我们将管道输出传送到一个循环结构,填入随后将要使用的变量,那么就会产生很多问题。一旦循环完成,其所依赖的变量就不存在了。

修改后:

#!/bin/shHEIGHT="null"
WIDTH="default"
SRC_YUV=
DEST_DIR=
MAX_QP=
MIN_QP=read_para_from_file(){#cat $1 | while read line #lines=`cat $1`while read line  ##划重点  doecho $linet_name=`echo $line |awk -F ' ' '{print $1}'`t_value=`echo $line |awk -F ' ' '{print $2}'`echo "k-v :$t_name -> $t_value"if [ $t_name = "width" ] ; thenecho "1 ->"$WIDTHWIDTH=$t_valueecho "1 ->"$WIDTHcontinuefiif [ $t_name = "height" ] ; thenecho "2 ->"$HEIGHTHEIGHT=$t_valueecho "2 ->"$HEIGHTcontinuefiif [ $t_name = "src_yuv" ] ; thenSRC_YUV=$t_valueecho "3 ->"$SRC_YUVcontinuefiif [ $t_name = "dest_dir" ] ; thenDEST_DIR=$t_valueecho "4"continuefiif [ $t_name = "max_qp" ] ; thenMIN_QP=$t_valueecho "5"continuefiif [ $t_name = "min_qp" ] ; thenMAX_QP=$t_valueecho "6"continuefiecho "get nothing -> "$linedone  < $1  ##重定向
}
show_global_para(){echo "show global var ->"echo "WIDTH -> $WIDTH"echo "HEIGHT -> $HEIGHT"echo "SRC_YUV -> $SRC_YUV"echo "DEST_DIR -> $DEST_DIR"echo "MAX_QP -> $MAX_QP"echo "MIN_QP -> $MIN_QP"
}read_para_from_file $1
show_global_para

管道日了狗-while read line大坑相关推荐

  1. linux ctrlc 退出循环_linux按行读取 (while read line与forloop)

    在linux下一般用while read line与for循环按行读取文件.这两种方法有什么区别呢? 现有如下test.txt文件: 1 while read line while read line ...

  2. amesim子模型_Amesim液压管道子模型(一):子模型的区别

    文章来源于Amesim学习与应用公众号,作者新浩 Amesim中液压管道子模型有十余种之多,很多人在使用时通常会直接选用首选子模型,而不太在意不同管道子模型之间的区别.其实,不同管道子模型适用于不同场 ...

  3. amesim子模型_Amesim液压管道子模型(二):子模型的选用

    文章来源 Amesim学习与应用公众号,作者新浩 1 引言在<Amesim液压管道子模型(一):子模型的区别>一文中,笔者向大家介绍了油液在管道中流动时的三种主要特性(即容性C.阻性R和惯 ...

  4. python 命令行参数-Python处理命令行参数

    1. 将命令行参数保存在列表中,注意argv[0]是程序本身的名字: import sys print(sys.argv) print(sys.argv[1]) python argv.py loca ...

  5. java sound api_Java Sound API

    Java Sound API是javaSE平台提供底层的(low-level)处理声音接口. 例外,java也提供了简单的实用的高层媒体接口(higher-level) - JMF(Java Medi ...

  6. Apache Kafka 0.9.0 教程 中文版 1. Getting Started

    原文地址:http://kafka.apache.org/documentation.html#introduction 翻译自 刘岳峰 1. Getting Started 1.1 Introduc ...

  7. java 外部类似_[求指点] 如何用java 实现类似linux中管道调用外部程序的功能

    想写个小程序实现类似linux中管道的功能,创建一个外部子进程,然后主进程不断地写输入给子进程,而后把子进程的返回值取出. 如下的小代码就是从stdin读入一个字符串,调用子进程(cat)返回这个串, ...

  8. 基于opencv实现模块化图像处理管道

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 在这篇文章中,我们将学习如何为图像处理实现一个简单的模块化管道,我 ...

  9. Linux入门-7 Linux管道、重定向以及文本处理

    Linux管道.重定向以及文本处理 1 Linux多命令协作:管道及重定向 管道和重定向 2 Linux命令行文本处理工具 文件浏览 基于关键字搜索-grep 基于列处理文本-cut 文本统计-wc ...

最新文章

  1. WIn32中CInternetSession运行异常(afxCurrentAppName 为空)
  2. install python-tk_No module named _tkinter, please install the python-tk package 解决方法总结
  3. 一种新的页面导航方法
  4. 怎么查计算机二级证书到没到学校,今年3月份考的全国计算机二级,结果忘记去领证书了,我是在城建学院考的,还会给我留着吗?这证书能补办吗...
  5. Python 首超 Java 雄霸5月编程语言指数榜!
  6. 数据结构算法题整理4
  7. 并行计算圆周率 c语言,并行计算:圆周率计算
  8. Python:自适应滤波器简介及其实现方法
  9. 视频教程-C语言编程初级入门-C/C++
  10. 教育部要求“强保障、上水平”,课后服务该如何提质增效?
  11. DHCP Relay 配置教程
  12. 节日大全c语言程序,C语言 程序设计 节日查询及任务提醒系统-万年历.doc
  13. 常用时序数据地址 MTGNN
  14. Linux ARM平台开发系列讲解(IIO子系统) 2.8.1 IIO驱动开发分析
  15. LODOP属性和方法
  16. NavigationController 常用方法归总
  17. JS在html中打印所有类型的数据
  18. 学生学籍管理系统 jsp mysql_学生学籍管理系统的设计与实现(JSP,MySQL)
  19. idea导包失败解决
  20. ANSYS CMD

热门文章

  1. scratch寄存器作用说明
  2. Java实现之弗洛伊德(Floyd)算法
  3. DAY6 for循环
  4. 微信小程序怎么把获取的值传到引用组件内_微信小程序如何将接口获取的数据传递给自定义组件...
  5. 18种html5时间轴插件源码_纯css3纵向时光轴 - Jazz Timeline
  6. Android动画学习之补间动画和逐帧动画,移动互联网app开发
  7. 【视频】javascript04
  8. 360手机刷机 360手机Magisk面具安装与使用教程
  9. js--手机端签到日历
  10. 报表制作原来这么简单,选对工具只需这四步~