while read与标识符

read -u3 i 的意思是从 3 号 fd (file descriptor,文件描述符) 中读一行数据到 i 变量中, 同理你明白 read -u4 j 的意思

而 3<afile 的意思是重定向 afile 到 3 号 fd 中, 同理你明白 4<bfile

所以,整个代码while read -u3 i && read -u4 j;do echo $i $j done 3<afile 4<bfile的意思是,不断从 afile 和 bfile 中分别读取内容到i , j 中,然后用echo 打印出来。 这个循环会一直执行直到遇到 afile 或 bfile 中至少任意一个的文件尾。 

比方说你 afile 的内容是abc

bfile 的内容是1234

则这段程序就会打印a 1b 2c 3

追问

为什么可以写成这样3<afile ,而不是exec 3<afile,而且不写在循环的前面呢?

追答

用现在的写法,相当于只对 while 语句进行重定向,while结束后,3,4 就没有了。 如果在 while 前面用 exec 3<afile  4<bfile 了话,从 exec 之后直到脚本结束,重定向的3,4都一直存在。

所以对于你的代码来说,既然只在 while 中需要用 afile bfile,那现在的写法就是最好的。 如果想在 while 后继续访问,那么可以考虑用 exec 3<afile 的方式。
时间: 2024-11-07 11:57:29

while read与标识符的相关文章

Scala基础语法(声明定义、标识符命名、Scala脚本入门)

一.声明与定义(赋值) 1.val, 常量声明   val x:T val x:T=e 2.var, 变量声明   var x:T var x:T=e ?类型省略(默认类型)val x=e var x=e ? 声明省略(连续声明) val x1,x2,x3 等价于 val x1;val x2; var x1,x2,x3:T=e  等价于  var xn:T=e 3.def,函数声明def abc(xn:T):T*=e def adder(m:Int,n:Int) =m+n def adder()

c语言合法标识符

C语言合法标识符 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 44597    Accepted Submission(s): 17933 Problem Description 输入一个字符串,判断其是否是C的合法标识符. Input 输入数据包含多个测试实例,数据的第一行是一个整数n,表示测试实例的个数,然后是n行输入数据,每行

通过串口接收带有标识符的数据方法

在做串口通信过程中,下位机向上位机发送的串口数据有时候需要带有指定的标识符,便于上位机根据标识符判断后续几位数据是做什么用的.也就是下位机和上位机约定数据帧的传输格式,便于在上位机将数据分离,当然这种数据帧格式可以自定义. 今天用arduino作为下位机,模拟数据通过自定义格式发送数据帧,利用串口将数据帧发送到android上位机,上位机用java代码实现数据提取,并在界面实时显示接收数据,虽然是模拟数据通过串口发送,但在实际项目开发中,原理相通. 以下是arduino代码,通过设定定时器,当接

HDOJ 2024 C语言合法标识符

C语言合法标识符 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 37056    Accepted Submission(s): 14897 Problem Description 输入一个字符串,判断其是否是C的合法标识符. Input 输入数据包含多个测试实例,数据的第一行是一个整数n,表示测试实例的个数,然后是n行输入数据,每行

java标识符

Java语言中,对于变量名,常量名,函数名,语句块名字,接口和自定义数据类型   统统称之为Java标识符. 标识符是命名用的. 标识符组成 Java标识符由数字,字母和下划线(_),美元符号($)组成,其他什么×%#符号都不能出现.在Java中是区分大小写的,而且还要求首位不能是数字.最重要的是,Java关键字不能当作Java标识符. 下面的标识符是合法的: myName,My_name,Points,$points,_sys_ta,OK,_23b,_3_ 下面的标识符是非法的: #name,

iOS提交审核:您的 App 正在使用广告标识符 (IDFA)

最近升级一个项目,打包提交后出现:您的app正在使用广告标识符(IDFA).因为项目中有用到一个检测用户流量的第三方TalkingData,因为之前向AppStore提交审核都通过了,就勾选了“否”,死活不能提交. 查询一下,有可能是Xcode的版本问题,就更新到最新版本,发现还是不行,最后在广告标识符下选择“是”后出现4个选项,分别是: 1.在 App 内投放广告 2.将此 App 安装归因于先前投放的特定广告 3.将此 App 中发生的操作归因于先前投放的特定广告 4.对使用广告标识符做确认

Linux系统固定磁盘标识符之wwid和uuid

背景描述,在Linux系统中,如果添加了新的SCSI磁盘或者映射SAN存储LUN操作,重启操作系统之后会出现磁盘标识符(sd*)错乱的情况. 例如之前添加的SAN存储LUN的磁盘标识符为/dev/sdd,重启之后发现变成/dev/sdh,特别是oracle RAC环境下我们是不希望出现这样的情况的. 解决这个问题之前,需要先搞清楚Linux系统中的wwid和uuid号. 一.wwid 根据SCSI标准,每个SCSI磁盘都有一个WWID,类似于网卡的MAC地址,要求是独一无二. 通过WWID标示S

01-03 Java关键字、标识符、注释、常量和进制问题、变量和数据类型

1:关键字 (1)被Java语言赋予特定含义的单词 (2)特点: 全部小写. (3)注意事项: A:goto和const作为保留字存在. B:类似于Notepad++这样的高级记事本会对关键字有特殊颜色标记 2:标识符 (1)就是给类,接口,方法,变量等起名字的字符序列 (2)组成规则: A:英文大小写字母 B:数字 C:$和_ (3)注意事项: A:不能以数字开头 B:不能是java中的关键字 C:区分大小写 (4)常见的命名规则(见名知意) A:包 其实就是文件夹,用于把相同的类名进行区分

变量与标识符的概念

1.变量:使用一个名称表示一个数值,可以发生变化的量对应的值 且变量要先声明,才可以赋值,才可以参与运算 2.数据类型. 基本数据类型 整型&浮点型 byte short int long &float单精度 double双精度 字符型 char 布尔型 boolean 取值为true or false 复合数据类型 类,接口,数组 3.常量 使用一个名称表示一个值,该量的值一经确定就不允许改变 for example: final doubl j=10; 4.标识符的命名 记忆通用法 不

java基本语法day01_08关键字_标识符的使用

关键字的定义与特点: 定义:被java语言赋予特殊的含义,用作专门用途的字符串(单词) 特点:关键字中所有的字母都为小写. 用于定义数据类型的关键字: class(类).interface(接口).enum(枚举).byte.short.int.float.double.long.char.boolean.void 用于定义数据类型值得关键字: true.false.null 用于定义流程控制的关键字: if.else.do.while.switch.case.default.for.conti