Answers:
该脚本从两个文件读取成对的字符串。在每次迭代中读取一个字符串从file11
进入lineA
,并从file22
成lineB
。直到遇到两个文件的末尾为止。循环的主体输出两个字符串和一个空行。
的<file11
手段“连接/从重定向标准输入file11
,其中“此命令”是到这个命令” while
循环。这本来可以写的0<file11
。
标准输入是文件描述符编号0。文件描述符1和2保留用于标准输出和标准错误流。
的3<file22
意思是“连接文件描述符3到file22
该命令”。数字3恰好是下一个“免费”文件描述符号,但是代码可以使用4或5或除0、1和2以外的任何小整数(可用文件描述符号的限制取决于外壳程序是什么)被使用,但最多可以保证9个数字有效。)
在循环中,read lineA
默认情况下将从标准输入(即从文件)读取字符串file11
(标准输入是从循环继承的)。这本来可以写的read lineA <&0
。
使用read lineB <&3
,read
命令从文件描述符3读取,即从而file22
不是标准输入读取(文件描述符3在循环中可用,就像标准输入一样)。
简而言之,它使用标准输入流和“额外”文件描述符(编号3)“同时”从两个文件中读取(依次从每个文件中读取一个字符串)。通常,一个人只能访问一个输入流,但这通过显式创建第二个输入流并将其连接到file22
文件来绕过该限制。
有关:
我在上方使用“字符串”一词,而不是“行”。从这两个文件读取的内容将剥去侧翼的空格,并且某些转义序列将被特别解释。
要使用读取一行read
,请使用
IFS= read -r varname
有关:
3<file22
就像是fopen
在FID
没有返回,但预先指定?
fdopen()
。是。