read 指令

警告
本文最后更新于 2023-10-22,文中内容可能已过时。

read 指令

echoread 配合使用,可以编写一些基本的 Linux 脚本,就用 vim 写,很爽。

read 命令用于从标准输入读取数值。

1
read [options] [name ...]

参数列表:

  • -a:后跟一个变量,该变量会被认为是个数组,然后给其赋值,默认是以空格为分割符。主要用于将输入参数存放到数组中。a 就是 array 的意思

    创建 shell 脚本 abc.sh

    1
    2
    
    read -a arr
    echo get ${#arr[@]} values in arra

    测试

    当然,你可以在交互式命令行中使用 read 命令

  • -d:后面跟一个标志符,其实只有其后的第一个字符有用,作为结束的标志。正常情况下,按 enter 就表示输入结束,然后执行 read 的下一个指令,但是当你一个参数想输入多行的时候或者别的原因,你可以自定义结束符,比如 ".",这样在你输入 ".“之前,read 的输入不会结束,输入 enter 也不会结束。d 就是 delimiter 的意思,分隔符。

    https://lk-images.oss-cn-beijing.aliyuncs.com/images/202310171917802.png

  • -p:后面跟提示信息,即在输入前打印提示信息。p 是 print 的意思

    https://lk-images.oss-cn-beijing.aliyuncs.com/images/202310171917802.png

    注意,-p 后面跟的参数要用引号引起来,不然就跟接受输入的变量名搞混了。

  • -e:在输入的时候可以使用命令补全功能。即按 Tab 键自动补全的功能。

  • -n:后跟一个数字,定义输入文本的长度,很实用,这个参数不是一个参数只能输入这么多,是不管你有多少个参数都只能输入这么多,空格也会算在内-n 和后面的数字可以连写

    https://lk-images.oss-cn-beijing.aliyuncs.com/images/202310171919899.png

    当输入到指定个数的字符的时候会自动停止输入,执行 read 后面的命令。

  • -r:屏蔽 \,如果没有该选项,则 \ 作为一个转义字符,有的话 \ 就是个普通文本字符了。

    不带 -r : 输入的 \ 是转义字符,再 echo 的时候不显示,

    https://lk-images.oss-cn-beijing.aliyuncs.com/images/202310171920013.png

    -r :输入的 \ 会正常显示

  • -s:安静模式,在输入字符时不再屏幕上显示,即隐藏,(实际上,数据是显示的,只是 read 命令将文本颜色设置成与背景相同的颜色),例如 login 时输入密码。

  • -t:后面跟秒数,定义输入字符的等待时间。时间过后没有输入会自动结束,输入到一半时间到了,也会自动结束,已经输入了的会作为你的全部输入。

此外:如果没有指定接收变量名 name,读取的数据将被自动赋值给特定的变量 REPLY 中,通过 $REPLY 获取,name 名字可以有多个,跟 -a 将所有输入放到一个数组变量中不同,这里是把多个输入放到多个变量中。规则是:

如果输入的数据数量少于变量的个数,那么多余的变量不会获取到数据,即变量值为空。

如果输入的数据数量多于变量的个数,那么超出的数据将都赋值给最后一个变量


我们在《Bash read 命令》中对 read 已经有了详细的学习。

0%