例子:

[liuhao@slave04 ~]$ cat test.sh
#! /bin/shx=1
echo "adasd" | while read line
dox=2
done
echo $x运行结果是
[liuhao@slave04 ~]$ sh test.sh
1

原因
 
原来是因为管道|创建了新的子进程,而子进程是在独立的进程空间(Context)运行了. 需要跟父进程通信的话, 得使用进程间通信机制. 不是简单的变量问题。

解决办法:

1、命名管道

shell中引用while中的变量 - Shell-Chinaunix


mkfifo pipe;
exec 3<>pipe;  #fd3 指向pipeecho "a b c" |while read line1 line2
do
echo $line1 >&3 # 写入fd3
doneread -u3 var #读取变量
echo $var
rm pipe;
exec 3>&-

2、改为管道输入为文件输入

shell while内获取外部变量内容 - 李秋 - 博客园

#!/bin/sh
x="this is the initial value of x"
while read line;dox="$line"echo $x
done < /tmp/tmp
echo x = $x

3、输入重定向

shell while内获取外部变量内容 - 李秋 - 博客园

#!/bin/sh
x="this is the initial value of x"
exec 3<&0         # save stdin 将标准输入重定向到文件描述符3
exec < /tmp/tmp # 输入文件
while read line; dox=$lineecho $x
done
exec 0<&3        # restore stdin
echo x = $x

4、临时文件桥接

MY_UUID=$(uuidgen)#或者$(cat /proc/sys/kernel/random/uuid)
MY_TMP_FILE_PATH=/tmp/${MY_UUID}.txtx="this is the initial value of x"while read line
dox=$line
echo $xdone < ${MY_TMP_FILE_PATH}echo $x

【Shell】while 循环中的变量无法保存|无法获取while中的变量|管道中的函数变量无法获取问题相关推荐

  1. matlab for循环不覆盖,将输出保存到文本文件而不覆盖和打印矩阵中的N个条目[matlab]...

    这是代码: for i= 1:4; fileID = fopen('testdata.txt', 'at'); fprintf(fileID, 'this is answer %d\n',i); fp ...

  2. Linux脚本保存管道中的变量,Linux下管道重定向使用以及Shell编程(操作系统)

    实验名称:Linux的基本操作 实验目的: 1.了解管道和重定向 2.熟悉基本的Linux脚本的编写 实验环境:Ubuntu 12.4(32位,简体中文) 实验内容: 1.将当前用户目录下的文件清单输 ...

  3. linux shell for 循环变量,shell for循环总结

    1 shell for循环语法 for 变量 in 列表 do command1 command2 ... commandN done 1.1 读取列表中的值 #!/bin/bash for test ...

  4. linux shell for 循环变量,shell for循环、循环变量值付给其他shell脚本的方法

    本文主要将在shell中如何编写for循环,并将循环变量作为下个shell脚本的参数. shell for 循环: #!第一种写法 类似c.java for ((i=1; i<=100; i + ...

  5. @PropertySource读取外部配置文件中的k-v保存到运行的环境变量中,加载完微博的配置文件以后使用${}取配置文件中的键值

    @PropertySource读取外部配置文件中的k-v保存到运行的环境变量中,加载完微博的配置文件以后使用${}取配置文件中的键值 该注解value={},可以使用String数组形式,读取多个配置 ...

  6. python读取中文txt文本-python中使用txt文本保存和读取变量

    ### 问题: 在python中需要经常有需要提前生成复杂的计算结果变量的需求减少程序计算运行时间的需求,因此这里把变量存在txt文本文件中. 解决方法: 使用两个函数解决问题,一个函数把变量保存到文 ...

  7. [转]Shell中脚本变量和函数变量的作用域

     转自:  http://blog.csdn.net/ltx19860420/article/details/5570902   在shell中定义函数可以使代码模块化,便于复用代码.不过脚本本身的变 ...

  8. (1)今有2018年1月1日—15日的猪肉价格和牛肉价格的数据,它们存在于一个Excel表格中,如下表所示。将其读入Python中并用一个数据框变量df保存......

    目录 (1)今有2018年1月1日-15日的猪肉价格和牛肉价格的数据,它们存在于一个Excel表格中,如下表所示.将其读入Python中并用一个数据框变量df保存. (2)分别绘制1月1日-10日的猪 ...

  9. python Pandas_TEXT实验(读取以下4位同学的成绩并用一个数据框变量pd保存,其中成绩保存在一个TXT文件中...)

    目录 1.(1)读取以下4位同学的成绩并用一个数据框变量pd保存,其中成绩保存在一个TXT文件中,如图所示. (2)对数据框变量pd进行切片操作,分别获得小红.张明.小江.小李的各科成绩,它们是4个数 ...

最新文章

  1. 如何在WIN7上添加磁盘
  2. 面向对象编程思想(2)--策略模式
  3. Java -Inverse covariance
  4. Microsoft Sync Framework同步数据库 3:针对同步进行设置
  5. intelij idea启动之谜
  6. UI5 datajs.js response handling
  7. linux python 操作mysql_python 简单操作MySQL
  8. 基于JAVA+SpringMVC+Mybatis+MYSQL的汽车维修管理平台
  9. scala案例_Scala案例类和案例对象深入(第1部分)
  10. python怎么设置回文数_Python中的回文数
  11. doT js模板入门
  12. P1268 树的重量
  13. 十八、x86汇编基础
  14. github安卓版下载_Pandownload安卓版+IDM神器,手机还有下载不了的资源吗?
  15. 宏脉系统怎么改服务器地址大全,宏脉系统使用手册大全新.doc
  16. 深度解密HTTP通信细节
  17. GandCrab4.0勒索病毒解密工具
  18. centos8安装和使用fmmpeg
  19. Matlab实现snn代码,SNN系列|神经元模型篇(3)SRM
  20. python构建一个计算列表中位数的函数_python学习之数据科学库

热门文章

  1. matplotlib(bar chart on polar axis)极轴图对数坐标的使用、极轴图、极坐标图、极区图、极散点图画法
  2. redis源码 -ziplist
  3. 计算机音乐先点什么,我电脑上有几千首歌,想在歌曲前面加上序号,但我忘了怎样使用拖把更? 爱问知识人...
  4. 近代中国的三次思想文化运动
  5. linux mint 17 输入法,mint17 输入法搞不定
  6. 魔塔之拯救白娘子~我的第一个VB6+DX8做的小游戏源码~17开始游戏-移动方向处理
  7. 是什么在影响我的工作效率
  8. 二维数组和指针之间的关系详解
  9. 记录戴尔t640切换集/独显及安装驱动时踩过的坑
  10. 记:某次关于均方根与均值的讨论心得