那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何在Linux使用read命令讀取用戶的輸入并保存到多個(gè)變量中

CHANBAEK ? 來源:myfreax ? 作者:myfreax ? 2022-12-05 16:14 ? 次閱讀

read命令是bash內(nèi)置命令,可從標(biāo)準(zhǔn)輸入或者文件描述符中讀取一行并將該行按空格拆分為多個(gè)字符串賦值給多個(gè)變量。

第一個(gè)字符串賦值給第一個(gè)變量,第二個(gè)字符串賦值給第二個(gè)變量,依此類推。如果沒有為read命令提供變量名稱,將整行賦值給REPLY變量。

在本教程中,我們將說明如何在Linux使用read命令讀取用戶的輸入并保存到多個(gè)變量中。

read 命令

read命令語法形式是read [options] [name...]。為了簡(jiǎn)單說明read命令的工作方式,請(qǐng)按快捷鍵CTRL+ALT+T打開終端,運(yùn)行命令read var1 var2。

read命令將會(huì)等待用戶輸入。可以輸入任意兩個(gè)字符串并使用空格進(jìn)行分隔,例如輸入Hello World。輸入完成后按Enter。

你將會(huì)發(fā)現(xiàn)read命令將Hello字符串分配給變量var1,World字符串賦值給變量var2。我們可以運(yùn)行命令echoprintf驗(yàn)證打印變量驗(yàn)證這一點(diǎn)。

read var1 var2
echo $var1
ehco $var1
Hello
World

如果沒有為read命令提供變量名稱,則將整行分配給REPLY變量。你可以再次終端運(yùn)行命令read

接著輸入任意字符串,也可以繼續(xù)輸入Hello World來驗(yàn)證這一點(diǎn)。最后運(yùn)行命令echo $REPLY打印$REPLY。

read
echo $REPLY
Hello World

如果為read命令指定的變量名稱大于用戶輸入并按空格拆分后字符串?dāng)?shù)量,其余變量名稱將不會(huì)被賦值。

如果為read命令指定的變量名稱小于用戶輸入并按空格拆分后字符串?dāng)?shù)量,其余字符串將賦值給最后一個(gè)變量名稱。

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

當(dāng)你運(yùn)行命令echo $var1打印變量var1時(shí),將會(huì)打印字符串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命令默認(rèn)使用一個(gè)或多個(gè)空格,制表符和換行符作為分隔符,拆分字符串為多個(gè)字符串,然后分配給多個(gè)變量名稱。

如果要使用其它分隔符拆分字符串,請(qǐng)將要作為分隔符的字符賦值給IFS變量。例如命令IFS=":"IFS變量設(shè)置為:。

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

如果用戶輸入字符串連續(xù)包含多個(gè)IFS變量指定的分隔符號(hào)。read命令將會(huì)在兩個(gè)彼此相鄰的分隔符,生成空值分配給變量。

例如IFS變量指定的分隔符號(hào)是:,而用戶輸入的是Linux::is:awesome.。read命令將會(huì)在::之間生成一個(gè)空值分配給變量。

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命令還允許您使用多個(gè)分隔符號(hào)來拆分字符串。當(dāng)指定多個(gè)分隔符號(hào)時(shí),請(qǐng)將分隔符分配給IFS變量,并且在它們之間沒有空格。

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

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

read 命令組合echo與管道

您可以使用其他方法將標(biāo)準(zhǔn)輸入傳遞給read命令,例如管道,here-string或heredoc。而不是在標(biāo)準(zhǔn)輸入的默認(rèn)方式鍵盤。

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

是因?yàn)楣艿赖挠覄t是在Shell的子進(jìn)程運(yùn)行的,如果沒有括號(hào)命令echo -e "$var1 $var2"并不是和read命令同一進(jìn)程運(yùn)行。就會(huì)導(dǎo)致兩個(gè)變量輸出都是空。

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

read 命令組合HereDoc

默認(rèn)情況下,read命令將反斜杠解釋為轉(zhuǎn)義符,有時(shí)可能會(huì)導(dǎo)致意外行為。要禁用反斜杠轉(zhuǎn)義,請(qǐng)使用read命令的-r選項(xiàng)。

在使用read命令時(shí),您應(yīng)該始終與read命令的-r選項(xiàng)一起使用。你可以運(yùn)行命令read <<< "Hello, World!"與命令read -r <<< "Hello, World!"。

驗(yàn)證在使用read-r選項(xiàng)和沒有-r選項(xiàng)時(shí)的區(qū)別。

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

read 命令提示消息

當(dāng)編寫交互式Shell腳本時(shí),可以使用read命令獲取用戶輸入。您還可以使用read命令的-p選項(xiàng),打印一條提示消息告知用戶當(dāng)前輸入在做什么操作。

如果Shell腳本要求用戶輸入敏感信息,例如密碼,可以使用read命令-s選項(xiàng)隱藏用戶的輸入。

例如命令read -r -s -p "Enter your password: "詢問用戶的密碼并隱藏在終端的輸出。

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

通常,您可以在while循環(huán)內(nèi)使用read命令來強(qiáng)制用戶提供預(yù)期的答案之一。shutdown.sh腳本將提示用戶重啟系統(tǒng)。

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 命令數(shù)組字符串

要將read命令拆分后的字符串分配給數(shù)組,而不是變量名稱,請(qǐng)使用read命令的-a選項(xiàng)。

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

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

結(jié)論

read命令用于將讀取用戶輸入行拆分為單詞。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11345

    瀏覽量

    210389
  • 字符串
    +關(guān)注

    關(guān)注

    1

    文章

    585

    瀏覽量

    20601
  • 命令
    +關(guān)注

    關(guān)注

    5

    文章

    696

    瀏覽量

    22108
  • Read
    +關(guān)注

    關(guān)注

    0

    文章

    10

    瀏覽量

    11129
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    何在Linux使用source命令加載變量與函數(shù)

    `source`命令用于在當(dāng)前Shell運(yùn)行文件命令,source命令可用于將函數(shù),變量和配置文件加載當(dāng)前Shell。
    的頭像 發(fā)表于 12-05 16:19 ?3096次閱讀

    linux驅(qū)動(dòng)通過uboot的變量實(shí)現(xiàn)掉電記憶

    讀取亮度。 首先大家能想到的就是讓讓他存儲(chǔ)到內(nèi)核能讀取到的rom中去,到底哪里合適的,方便讀寫 經(jīng)過查資料,發(fā)現(xiàn)uboot的環(huán)境變量的更改是直接保存到rom
    的頭像 發(fā)表于 07-04 19:17 ?1181次閱讀

    何在Linux中使用htop命令

    本文介紹如何在 Linux 中使用 htop 命令。
    的頭像 發(fā)表于 12-04 14:45 ?2178次閱讀
    如<b class='flag-5'>何在</b><b class='flag-5'>Linux</b>中使用htop<b class='flag-5'>命令</b>

    labview如何自動(dòng)保存加載用戶信息?

    想在程序運(yùn)行結(jié)束后保存相關(guān)的用戶信息,然后在下次打開時(shí)直接讀取用戶信息,該怎么實(shí)現(xiàn)???
    發(fā)表于 01-10 10:56

    Linux用戶有關(guān)的命令

    Linux用戶有關(guān)的命令 Linux用戶有關(guān)的命令  passwd
    發(fā)表于 01-18 12:46 ?782次閱讀

    C語言入門教程-Printf:讀取用戶輸入

    Printf:讀取用戶輸入 前面的程序很好,但要是如果能從用戶那里讀入值5和7而不是使用固定的值的話,那就更好了。可以改為下面的程序: #include
    發(fā)表于 07-29 10:42 ?1912次閱讀

    Linux易混淆命令的區(qū)別

    素材來源:Linux迷 sudo 與 su 兩個(gè)命令的最大區(qū)別是:sudo 命令需要輸入當(dāng)前用戶的密碼,su
    的頭像 發(fā)表于 09-25 14:25 ?1827次閱讀
    <b class='flag-5'>Linux</b><b class='flag-5'>中</b>易混淆<b class='flag-5'>命令</b>的區(qū)別

    HarmonyOS應(yīng)用開發(fā):保存到變量

    一、創(chuàng)建項(xiàng)目 二、示例代碼 // 變量始終保存在內(nèi)存getNum:function () { let num = 100; function add() { num += 1
    的頭像 發(fā)表于 06-07 10:23 ?881次閱讀
    HarmonyOS應(yīng)用開發(fā):<b class='flag-5'>保存到</b><b class='flag-5'>變量</b>

    何在Linux使用pidof命令

    `pidof`是一個(gè)命令行程序,可讓您找到正在運(yùn)行程序的進(jìn)程ID。在教程,我們將說明如何在Linux 使用pidof命令。
    的頭像 發(fā)表于 12-05 17:01 ?2389次閱讀

    如何讓變量在系統(tǒng)掉電時(shí)都保存到EEPROM里

    (1)問:我需要把我所有的運(yùn)行時(shí)狀態(tài)變量在系統(tǒng)掉電時(shí)都保存到EEPROM里,我該怎么做? 答:這是不是要告訴編譯器來建立一個(gè)連續(xù)的存儲(chǔ)器塊? 有兩種方法你可以用來處理這個(gè)問題;我們假設(shè)只有一些確定
    的頭像 發(fā)表于 01-22 16:18 ?1462次閱讀

    Python將圖片輸出為二維數(shù)組保存到txt

    使用Python將圖片輸出為二維數(shù)組,保存到txt文件
    的頭像 發(fā)表于 01-11 16:21 ?1728次閱讀

    何在Linux上使用粘貼命令

    粘貼命令的各種選項(xiàng)和使用場(chǎng)景,通過示例和輸出演示如何使用它。 一、什么是粘貼命令? Paste命令是Unix和Linux操作系統(tǒng)上的一個(gè)實(shí)
    的頭像 發(fā)表于 02-08 16:58 ?1883次閱讀

    何在Linux命令運(yùn)行Python腳本

    Python 是一種高級(jí)編程語言,被廣泛應(yīng)用于數(shù)據(jù)科學(xué)、機(jī)器學(xué)習(xí)、Web 開發(fā)等領(lǐng)域。在 Linux 操作系統(tǒng),Python 是一個(gè)默認(rèn)安裝的解釋器,用戶可以通過命令行界面(CLI)
    的頭像 發(fā)表于 05-12 14:49 ?1757次閱讀

    shell編程基本語法

    了一個(gè)名為 name 的變量賦值為 John 。要輸出變量的值,可以使用 echo 命令: echo $name 。 輸入輸出:可以使用
    的頭像 發(fā)表于 11-08 10:46 ?526次閱讀

    input輸入多個(gè)變量

    在編程,我們經(jīng)常需要從用戶那里獲取輸入。而在某些情況下,我們可能需要讓用戶一次性輸入多個(gè)
    的頭像 發(fā)表于 11-23 15:35 ?1264次閱讀
    百家乐官网推饼| 百家乐庄牌闲牌| 新东方百家乐官网的玩法技巧和规则| 大发888 现金棋牌游戏| 百家乐扑克桌布| 百家乐官网开户送彩金28| 必博备用| 百家乐娱乐场真人娱乐场| 鼎龙百家乐官网的玩法技巧和规则 | 百家乐首页红利| 百家乐盛大娱乐城城| 罗浮宫百家乐官网的玩法技巧和规则| 普兰县| 大发888官网 官方| 全讯网qtqnet| 缅甸百家乐赌博有假吗| 百家乐游戏开发技术| 康莱德百家乐官网的玩法技巧和规则 | 都坊百家乐官网的玩法技巧和规则| 真人百家乐官网是骗局| 456棋牌游戏| 大发888游乐场| 大发888代理| 太阳城公司| 大发888游戏币| 大发888娱乐城网站| 澳门百家乐官方网站| 大发888葡京下载地址| 威尼斯人娱乐城信誉好吗| 大发888真钱游戏娱乐城下载| 大发888娱乐游戏下载 客户端| 亚洲顶级赌场 网投领导者| 德州扑克官网| 达州市| 百家乐官网打大必赢之法| 米泉市| 百家乐官网注册开户送现金 | 百家乐官网黑牌靴| 百家乐官网牌| 网络百家乐官网破| 百家乐官网怎样下注|