天天看点

shell read用法分析_学习笔记

时间:2017.12.19

作者:李强

参考:man,info,magedu讲义,万能的internet

实验环境:CentOS 6.9与CentOS7.4

声明:以下英文纯属个人翻译,英文B级,欢迎纠正,以下内容纯属个人理解,并没有对错,只是参考,盗版不纠,才能有限,希望不误人子弟为好。

读取用户输入:

1、read

read [-ers] [-a array] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]

read接收的和cat一样是标准输入。他会将接收来自stdin或者从fd中(如果-u选项使用的话)的单独一行,然后每行划分成像单词一样的段。你指定几个变量划分成几个段,以空格为分隔符,目前看是如此。然后把空格分割的段赋值个定义的变量。

这里我们指定了2个name,然后就会把输入的"1x 2y 3z"这一行,以空格划分成2段,前面是1x,后面是"2y 3z"。然后前面复制给x,后面赋值给y

。如果只指定了x,那么一整行都会赋给x,如果没有指定name,存放在REPLAY变量中

选项:

-p prompt:prompt,提示信息,其后跟name把用户stdin存放到name中

-t timeout :timeout,用户一定时间不输入,就退出程序

-s :不打印来自终端的输入,可用于密码输入,但是回车后并没有换行。

-d delim:以某个定界符来终止变量内容的读取。

-e :

-r :禁止反斜线做为转义符使用,就是单纯的反斜线字符。

-a array :

-n nchars:

-N nchars:

4)、read -u

while read -u3 i && read -u4 j;do 

echo $i $j 

done 3<afile 4<bfile

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

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

所以,整个代码的意思是,不断从 afile 和 bfile 中分别读取内容到i , j 中,然后用echo 打印出来。

这个循环会一直执行直到遇到 afile 或 bfile 中至少任意一个的文件尾。 

比方说你 afile 的内容是

a

b

c

bfile 的内容是

1

2

3

4

则这段程序就会打印

a 1

b 2

c 3

本文转自 lajifeiwomoshu 51CTO博客,原文链接:http://blog.51cto.com/lajifeiwomoshu/2052163