0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何在Linux使用read命令读取用户的输入并保存到多个变量中

CHANBAEK 来源:myfreax 作者:myfreax 2022-12-05 16:14 次阅读

read命令是bash内置命令,可从标准输入或者文件描述符中读取一行并将该行按空格拆分为多个字符串赋值给多个变量。

第一个字符串赋值给第一个变量,第二个字符串赋值给第二个变量,依此类推。如果没有为read命令提供变量名称,将整行赋值给REPLY变量。

在本教程中,我们将说明如何在Linux使用read命令读取用户的输入并保存到多个变量中。

read 命令

read命令语法形式是read [options] [name...]。为了简单说明read命令的工作方式,请按快捷键CTRL+ALT+T打开终端,运行命令read var1 var2

read命令将会等待用户输入。可以输入任意两个字符串并使用空格进行分隔,例如输入Hello World。输入完成后按Enter。

你将会发现read命令将Hello字符串分配给变量var1World字符串赋值给变量var2。我们可以运行命令echoprintf验证打印变量验证这一点。

read var1 var2
echo $var1
ehco $var1
Hello
World

如果没有为read命令提供变量名称,则将整行分配给REPLY变量。你可以再次终端运行命令read

接着输入任意字符串,也可以继续输入Hello World来验证这一点。最后运行命令echo $REPLY打印$REPLY

read
echo $REPLY
Hello World

如果为read命令指定的变量名称大于用户输入并按空格拆分后字符串数量,其余变量名称将不会被赋值。

如果为read命令指定的变量名称小于用户输入并按空格拆分后字符串数量,其余字符串将赋值给最后一个变量名称。

例如命令echo "Hello" | (read var1 var2; echo -e "Var1: $var1 Var2: $var2")

当你运行命令echo $var1打印变量var1时,将会打印字符串Hello。命令echo $var2打印空的输出。

#小于
echo "Hello" | (read var1 var2; echo -e "Var1: $var1 
Var2: $var2")

#大于
echo "www myfreax com" | (read var1 var2; echo -e "Var1: $var1 
Var2: $var2")

read 命令分隔符

read命令默认使用一个或多个空格,制表符和换行符作为分隔符,拆分字符串为多个字符串,然后分配给多个变量名称。

如果要使用其它分隔符拆分字符串,请将要作为分隔符的字符赋值给IFS变量。例如命令IFS=":"IFS变量设置为:

echo "Linux:is:awesome." | (IFS=":" read -r var1 var2 var3; echo -e "$var1 
$var2 
$var3")
Linux 
is 
awesome.

如果用户输入字符串连续包含多个IFS变量指定的分隔符号。read命令将会在两个彼此相邻的分隔符,生成空值分配给变量。

例如IFS变量指定的分隔符号是:,而用户输入的是Linux::is:awesome.。read命令将会在::之间生成一个空值分配给变量。

echo "Linux::is:awesome." |   (IFS=":" read -r var1 var2 var3 var4; echo -e "Var1: $var1 
Var2: $var2 
Var3: $var3 
Var4: $var4")
Var1: Linux 
Var2:  
Var3: is 
Var4: awesome.

read命令还允许您使用多个分隔符号来拆分字符串。当指定多个分隔符号时,请将分隔符分配给IFS变量,并且在它们之间没有空格。

例如命令IFS="-_"使用_-作为分隔符,

echo 'Linux_is-awesome.' | (IFS="-_" read -r var1 var2 var3; echo -e "$var1 
$var2 
$var3")
Linux 
is 
awesome.

read 命令组合echo与管道

您可以使用其他方法将标准输入传递给read命令,例如管道,here-string或heredoc。而不是在标准输入的默认方式键盘。

例如命令echo "Hello, World!" | (read var1 var2; echo -e "$var1 $var2")。这里之所以使用括号括起readecho命令。

是因为管道的右则是在Shell的子进程运行的,如果没有括号命令echo -e "$var1 $var2"并不是和read命令同一进程运行。就会导致两个变量输出都是空。

echo "Hello, World!" | (read var1 var2; echo -e "$var1 
$var2")
Hello,
World!

read 命令组合HereDoc

默认情况下,read命令将反斜杠解释为转义符,有时可能会导致意外行为。要禁用反斜杠转义,请使用read命令的-r选项。

在使用read命令时,您应该始终与read命令的-r选项一起使用。你可以运行命令read <<< "Hello, World!"与命令read -r <<< "Hello, World!"

验证在使用read-r选项和没有-r选项时的区别。

read <<< "Hello, 	World!"
read -r <<< "Hello, 	World!"
Hello, tWorld!
Hello, 	World!

read 命令提示消息

当编写交互式Shell脚本时,可以使用read命令获取用户输入。您还可以使用read命令的-p选项,打印一条提示消息告知用户当前输入在做什么操作。

如果Shell脚本要求用户输入敏感信息,例如密码,可以使用read命令-s选项隐藏用户的输入。

例如命令read -r -s -p "Enter your password: "询问用户的密码并隐藏在终端的输出。

read -r -p "Are you sure?"
read -r -s -p "Enter your password: "

通常,您可以在while循环内使用read命令来强制用户提供预期的答案之一。shutdown.sh脚本将提示用户重启系统。

while true; do
    read -r -p "Do you wish to reboot the system? (Y/N): " answer
    case $answer in
        [Yy]* ) reboot; break;;
        [Nn]* ) exit;;
        * ) echo "Please answer Y or N.";;
    esac
done

shutdown.sh

read 命令数组字符串

要将read命令拆分后的字符串分配给数组,而不是变量名称,请使用read命令的-a选项。

read -r -a MY_ARR <<< "Linux is awesome."

for i in "${MY_ARR[@]}"; do 
  echo "$i"
done
Linux 
is 
awesome.

结论

read命令用于将读取用户输入行拆分为单词。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    11196

    浏览量

    208662
  • 字符串
    +关注

    关注

    1

    文章

    569

    浏览量

    20462
  • 命令
    +关注

    关注

    5

    文章

    674

    浏览量

    21961
  • Read
    +关注

    关注

    0

    文章

    10

    浏览量

    11093
收藏 人收藏

    评论

    相关推荐

    何在Linux使用source命令加载变量与函数

    `source`命令用于在当前Shell运行文件命令,source命令可用于将函数,变量和配置文件加载当前Shell。
    的头像 发表于 12-05 16:19 2946次阅读

    linux驱动通过uboot的变量实现掉电记忆

    读取亮度。 首先大家能想到的就是让让他存储到内核能读取到的rom中去,到底哪里合适的,方便读写 经过查资料,发现uboot的环境变量的更改是直接保存到rom
    的头像 发表于 07-04 19:17 1034次阅读

    何在Linux中使用htop命令

    本文介绍如何在 Linux 中使用 htop 命令
    的头像 发表于 12-04 14:45 1805次阅读
    如<b class='flag-5'>何在</b><b class='flag-5'>Linux</b>中使用htop<b class='flag-5'>命令</b>

    labview如何自动保存加载用户信息?

    想在程序运行结束后保存相关的用户信息,然后在下次打开时直接读取用户信息,该怎么实现啊?
    发表于 01-10 10:56

    Linux用户有关的命令

    Linux用户有关的命令 Linux用户有关的命令  passwd
    发表于 01-18 12:46 759次阅读

    C语言入门教程-Printf:读取用户输入

    Printf:读取用户输入 前面的程序很好,但要是如果能从用户那里读入值5和7而不是使用固定的值的话,那就更好了。可以改为下面的程序: #include
    发表于 07-29 10:42 1874次阅读

    Linux易混淆命令的区别

    素材来源:Linux迷 sudo 与 su 两个命令的最大区别是:sudo 命令需要输入当前用户的密码,su
    的头像 发表于 09-25 14:25 1738次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>中</b>易混淆<b class='flag-5'>命令</b>的区别

    HarmonyOS应用开发:保存到变量

    一、创建项目 二、示例代码 // 变量始终保存在内存getNum:function () { let num = 100; function add() { num += 1
    的头像 发表于 06-07 10:23 829次阅读
    HarmonyOS应用开发:<b class='flag-5'>保存到</b><b class='flag-5'>变量</b>

    何在Linux使用pidof命令

    `pidof`是一个命令行程序,可让您找到正在运行程序的进程ID。在教程,我们将说明如何在Linux 使用pidof命令
    的头像 发表于 12-05 17:01 2255次阅读

    如何让变量在系统掉电时都保存到EEPROM里

    (1)问:我需要把我所有的运行时状态变量在系统掉电时都保存到EEPROM里,我该怎么做? 答:这是不是要告诉编译器来建立一个连续的存储器块? 有两种方法你可以用来处理这个问题;我们假设只有一些确定
    的头像 发表于 01-22 16:18 1311次阅读

    Python将图片输出为二维数组保存到txt

    使用Python将图片输出为二维数组,保存到txt文件
    的头像 发表于 01-11 16:21 1640次阅读

    何在Linux上使用粘贴命令

    粘贴命令的各种选项和使用场景,通过示例和输出演示如何使用它。 一、什么是粘贴命令? Paste命令是Unix和Linux操作系统上的一个实
    的头像 发表于 02-08 16:58 1751次阅读

    何在Linux命令运行Python脚本

    Python 是一种高级编程语言,被广泛应用于数据科学、机器学习、Web 开发等领域。在 Linux 操作系统,Python 是一个默认安装的解释器,用户可以通过命令行界面(CLI)
    的头像 发表于 05-12 14:49 1639次阅读

    shell编程基本语法

    了一个名为 name 的变量赋值为 John 。要输出变量的值,可以使用 echo 命令: echo $name 。 输入输出:可以使用
    的头像 发表于 11-08 10:46 422次阅读

    input输入多个变量

    在编程,我们经常需要从用户那里获取输入。而在某些情况下,我们可能需要让用户一次性输入多个
    的头像 发表于 11-23 15:35 1100次阅读