管道日了狗-while read line大坑
想着定义个全局变量,用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大坑相关推荐
- linux ctrlc 退出循环_linux按行读取 (while read line与forloop)
在linux下一般用while read line与for循环按行读取文件.这两种方法有什么区别呢? 现有如下test.txt文件: 1 while read line while read line ...
- amesim子模型_Amesim液压管道子模型(一):子模型的区别
文章来源于Amesim学习与应用公众号,作者新浩 Amesim中液压管道子模型有十余种之多,很多人在使用时通常会直接选用首选子模型,而不太在意不同管道子模型之间的区别.其实,不同管道子模型适用于不同场 ...
- amesim子模型_Amesim液压管道子模型(二):子模型的选用
文章来源 Amesim学习与应用公众号,作者新浩 1 引言在<Amesim液压管道子模型(一):子模型的区别>一文中,笔者向大家介绍了油液在管道中流动时的三种主要特性(即容性C.阻性R和惯 ...
- python 命令行参数-Python处理命令行参数
1. 将命令行参数保存在列表中,注意argv[0]是程序本身的名字: import sys print(sys.argv) print(sys.argv[1]) python argv.py loca ...
- java sound api_Java Sound API
Java Sound API是javaSE平台提供底层的(low-level)处理声音接口. 例外,java也提供了简单的实用的高层媒体接口(higher-level) - JMF(Java Medi ...
- Apache Kafka 0.9.0 教程 中文版 1. Getting Started
原文地址:http://kafka.apache.org/documentation.html#introduction 翻译自 刘岳峰 1. Getting Started 1.1 Introduc ...
- java 外部类似_[求指点] 如何用java 实现类似linux中管道调用外部程序的功能
想写个小程序实现类似linux中管道的功能,创建一个外部子进程,然后主进程不断地写输入给子进程,而后把子进程的返回值取出. 如下的小代码就是从stdin读入一个字符串,调用子进程(cat)返回这个串, ...
- 基于opencv实现模块化图像处理管道
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 在这篇文章中,我们将学习如何为图像处理实现一个简单的模块化管道,我 ...
- Linux入门-7 Linux管道、重定向以及文本处理
Linux管道.重定向以及文本处理 1 Linux多命令协作:管道及重定向 管道和重定向 2 Linux命令行文本处理工具 文件浏览 基于关键字搜索-grep 基于列处理文本-cut 文本统计-wc ...
最新文章
- WIn32中CInternetSession运行异常(afxCurrentAppName 为空)
- install python-tk_No module named _tkinter, please install the python-tk package 解决方法总结
- 一种新的页面导航方法
- 怎么查计算机二级证书到没到学校,今年3月份考的全国计算机二级,结果忘记去领证书了,我是在城建学院考的,还会给我留着吗?这证书能补办吗...
- Python 首超 Java 雄霸5月编程语言指数榜!
- 数据结构算法题整理4
- 并行计算圆周率 c语言,并行计算:圆周率计算
- Python:自适应滤波器简介及其实现方法
- 视频教程-C语言编程初级入门-C/C++
- 教育部要求“强保障、上水平”,课后服务该如何提质增效?
- DHCP Relay 配置教程
- 节日大全c语言程序,C语言 程序设计 节日查询及任务提醒系统-万年历.doc
- 常用时序数据地址 MTGNN
- Linux ARM平台开发系列讲解(IIO子系统) 2.8.1 IIO驱动开发分析
- LODOP属性和方法
- NavigationController 常用方法归总
- JS在html中打印所有类型的数据
- 学生学籍管理系统 jsp mysql_学生学籍管理系统的设计与实现(JSP,MySQL)
- idea导包失败解决
- ANSYS CMD