首页 / 知识
关于linux:Shell脚本输入重定向奇数
2023-04-11 16:58:00

Shell scripting input redirection oddities
谁能解释这种行为?
导致没有输出,而:
产生预期的输出:
管道不应该一步一步地执行第二个示例中对test.file的重定向吗? 我对破折号和bash壳都尝试了相同的代码,并且两者的行为相同。
确实会输出
因为管道在子外壳中运行它们的每个组件,所以不会产生任何输出。子外壳继承父外壳变量的副本,而不是共享它们。尝试这个:
括号定义了将在子shell中运行的代码区域,并且$ foo在其内部进行修改后保留其原始值。 现在尝试这个:
花括号仅用于分组,不创建子外壳,花括号内部修改的$ foo与花括号外部修改的$ foo相同。 现在尝试这个:
在花括号内,内置的read会正确创建$ var1和$ var2,您可以看到它们得到了回应。在大括号之外,它们不再存在。花括号中的所有代码都在子shell中运行,因为它是管道的一个组成部分。 您可以在花括号之间放置任意数量的代码,因此,每当需要运行用于解析其他内容的shell脚本块时,便可以使用这种"管道成块"构造。 已经正确回答了此问题,但尚未提出解决方案。使用ksh,而不是bash。相比:
至:
由于这样的小巧之处,ksh是高级的编程外壳。 (我认为bash是更好的交互式外壳。)
我对这个问题的看法(使用Bash):
该职位已得到适当的答复,但我想提供一种可能有用的替代衬垫。 要将回声(或标准输出)中的空格分隔值分配给外壳变量,可以考虑使用外壳数组:
在此示例中,var是一个数组,可以使用构造$ {var [index]}访问内容,其中index是数组索引(从0开始)。 这样,您可以将任意数量的参数分配给相关的数组索引。 好吧,我知道了! 这是一个很难捕获的错误,但是是由外壳处理管道的方式导致的。管道的每个元素都在单独的过程中运行。当read命令设置var1和var2时,将它们设置为自己的子shell,而不是父shell。因此,当子外壳程序退出时,var1和var2的值将丢失。您可以尝试做
返回预期的答案。不幸的是,这仅适用于单个变量,您一次不能设置多个。为了一次设置多个变量,您必须读入一个变量并将其切成多个变量,或者使用类似以下的方法:
虽然我承认它不如使用管道优雅,但它可以工作。当然,您应该记住,读取是要从文件读取为变量,因此使其从标准输入中读取会有点困难。 这是因为管道版本正在创建一个子外壳,该子外壳将变量读入其本地空间,然后在子外壳退出时销毁该变量。 执行此命令
并使用pstree -p查看正在运行的进程,您将看到一个额外的shell挂在主shell上。
尝试:
正如多人所言,问题是var1和var2是在子外壳程序环境中创建的,而该子外壳程序退出后会被破坏。上面的代码避免了破坏子外壳,直到结果被回显为止。另一个解决方案是:
|
最新内容
相关内容
python怎么输出换行
python怎么输出换行,培训,工作,结果,方法,两个,引号,当中,同行,以上,需求,python在我们常用的print()方法进行输出时,通常输出结果是整行显示python不换行输出
python不换行输出,培训,函数,赋值,变量,表示,以上,参数,结束,格式,结果,由于python的print()函数默认是以换行符结束的,所以在默认的情况下会python怎么多行输入
python怎么多行输入,异常,标准,培训,环境,设备,文件,函数,键盘,方式,语句,python中的Input()函数在输入时,遇到回车符,那么一次输入就结束了。python脚本语言
python脚本语言,代码,设计,情况,培训,语句,项目,基础,意外,异常,空格,Python是一种计算机程序设计语言。是一种面向对象的动态类型语言,最初被pythonpython是脚本语言吗?
pythonpython是脚本语言吗?,设计,培训,大规模,项目,软件,面临,开发者,语言,脚本语言,方法,Python是脚本语言。python是一种计算机程序设计语python输出函数叫什么
python输出函数叫什么,培训,标准,检测,地方,函数,语句,参数,空格,圆括号,关键字,在编程实践中,print的使用频率非常高,特别是程序运行到某个时python新手必看之文本文件的输入输
python新手必看之文本文件的输入输出,培训,标准,数据,文件,对象,输入输出,新手,模式,功能,内容,Python具有基本的文本文件读写功能。Python的python如何获取用户输入
python如何获取用户输入,培训,字符串,整数,类型,文本,文档,用户,小数点,位数,以上,python整数输入#!/usr/bin/python3usr_ip=input("Enteranpython解释器的多种使用
python解释器的多种使用,培训,文件,多种,脚本,后面,目录,终端,文件名,文件夹,路径,python解释器的多种使用1、在终端输入python就可以运行Pytpython输入三个数字从小到大排序
python输入三个数字从小到大排序,数字,培训,整数,从小到大,错误,继续,方法,提示,用户,函数,python输入三个数字从小到大排序1、说明使用list.python输入身高体重算BMI
python输入身高体重算BMI,单位,指数,等级,指标,公式,数字,检测,培训,体重,身高,python输入身高体重算BMI1、说明身体指标BMI是根据人的身高和python输入数字变成月份
python输入数字变成月份,时间,数字,基数,培训,当月,流程,结果,年份,函数,时间差,python输入数字变成月份1、思路说明可计算给定区间的时间差,