Bash read命令

问题场景:IFS="," read -d ' ' -ra  ARG  <<<  ${ARGS}

概念

read 命令是一个非常重要的bash命令,用于接收标准输入或者其他文件描述符的输入,并且可以和用户进行交互。得到输入后,read命令将数据放入一个标准变量中。该命令可以一次读取多个变量的值,变量和输入的值都需要使用空格隔开。在read命令后面,如果没有指定变量名,读取的数据将被自动赋值给特定的变量$REPLY。read每次调用读取一行。

用法 

read [选项] [变量名] 

参数说明
-a指定变量为数组
-r反斜杠转义不会生效,意味着行末的’\’成为有效的字符,例如使 \n 成为有效字符而不是换行
-p指定输出提示信息
-d输入结束符,当输入的内容出现这个字符时,立即结束。一般情况下是以IFS为参数的间隔,但是通过-d自定义
-n指定输入的字符长度
-t指定读取值时等待的时间(秒),read命令会一直等待用户输入,时间到自动退出
-s不显示输入的值,一般用于密码

示例:

1、参数示例

# 不带参数,输入值都用空格隔开
[hadoop@hadoop01 ~]$ read ARG
arg1 arg2
[hadoop@hadoop01 ~]$ echo $ARG
arg1 arg2

# 定义多个变量,变量和输入值都用空格隔开。顺序赋值,超过自动退出,不足会等待输入
[hadoop@hadoop01 ~]$ read ARG1 ARG2
hello hi
[hadoop@hadoop01 ~]$ echo $ARG1
hello
[hadoop@hadoop01 ~]$ echo $ARG2
hi

# -r,反斜杠也会被输出
[hadoop@hadoop01 ~]$ read -r ARG
\arg
[hadoop@hadoop01 ~]$ echo $ARG
\arg

# -d,指定的字符作为命令的结束输入,未输入指定的结束符前输入窗口一直存,enter键也无效
[hadoop@hadoop01 ~]$ read -d "-" ARG
arg1
arg2
-[hadoop@hadoop01 ~]$ echo $ARG
arg1 arg2

# -a,定义数组
[hadoop@hadoop01 ~]$ read -a ARG
arg1 arg2
[hadoop@hadoop01 ~]$ echo ${ARG[0]} ${ARG[1]}
arg1 arg2

# -p,指定输出提示信息
[hadoop@hadoop01 ~]$ read -p "please enter arg:" ARG
please enter arg:arg1
[hadoop@hadoop01 ~]$ echo $ARG
arg1

2、示例脚本

#!/bin/bash
read -t 10 -p "Please enter user:" user
echo "User is $user"

read -s -n 6 -t 10 -p "Please enter password:" password
echo "Password is $password"

3、读取文件的首行并赋值给变量ARG

read -r line < file
#输入重定向操作符 < file 表示打开并读取文件file,然后将它作为read命令的标准输入。

[hadoop@hadoop01 ~]$ cat file 
helle /data/info
hello world
hello hey
[hadoop@hadoop01 ~]$ read -r line < file 
[hadoop@hadoop01 ~]$ echo $line
helle /data/info

4、IFS

参考: Bash IFS变量

 read命令读入的行被分隔成多个单词,会删除包含在IFS变量中出现的所有字符,但这意味着开头和结尾的空格和制表符都会被删除。如果想保留这些符号,可以通过设置IFS为空来完成:

IFS= read -r line < file

5、读文件 

cat查看后,通过管道将结果传递给read的while,read每次调用读取一行。

count=1;
cat file | while read line; do
    echo "$count: $line"
    count=$(($count + 1))
done

6、读方法输出的结果

while IFS= read -d '' -r ARG; do
  CMD+=("$ARG")
done << (build_command "$@")

 

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

訾零

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值