read命令是bash內(nèi)置命令,可從標(biāo)準輸入或者文件描述符中讀取一行并將該行按空格拆分為多個字符串賦值給多個變量。
第一個字符串賦值給第一個變量,第二個字符串賦值給第二個變量,依此類推。如果沒有為read命令提供變量名稱,將整行賦值給REPLY變量。
在本教程中,我們將說明如何在Linux使用read命令讀取用戶的輸入并保存到多個變量中。
read 命令
read命令語法形式是read [options] [name...]。為了簡單說明read命令的工作方式,請按快捷鍵CTRL+ALT+T打開終端,運行命令read var1 var2。
read命令將會等待用戶輸入??梢暂斎肴我鈨蓚€字符串并使用空格進行分隔,例如輸入Hello World。輸入完成后按Enter。
你將會發(fā)現(xiàn)read命令將Hello字符串分配給變量var1,World字符串賦值給變量var2。我們可以運行命令echo或printf驗證打印變量驗證這一點。
read var1 var2
echo $var1
ehco $var1
Hello
World
如果沒有為read命令提供變量名稱,則將整行分配給REPLY變量。你可以再次終端運行命令read。
接著輸入任意字符串,也可以繼續(xù)輸入Hello World來驗證這一點。最后運行命令echo $REPLY打印$REPLY。
read
echo $REPLY
Hello World
如果為read命令指定的變量名稱大于用戶輸入并按空格拆分后字符串?dāng)?shù)量,其余變量名稱將不會被賦值。
如果為read命令指定的變量名稱小于用戶輸入并按空格拆分后字符串?dāng)?shù)量,其余字符串將賦值給最后一個變量名稱。
例如命令echo "Hello" | (read var1 var2; echo -e "Var1: $var1 Var2: $var2")。
當(dāng)你運行命令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變量設(shè)置為:。
echo "Linux:is:awesome." | (IFS=":" read -r var1 var2 var3; echo -e "$var1
$var2
$var3")
Linux
is
awesome.
如果用戶輸入字符串連續(xù)包含多個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命令還允許您使用多個分隔符號來拆分字符串。當(dā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)準輸入傳遞給read命令,例如管道,here-string或heredoc。而不是在標(biāo)準輸入的默認方式鍵盤。
例如命令echo "Hello, World!" | (read var1 var2; echo -e "$var1 $var2")。這里之所以使用括號括起read和echo命令。
是因為管道的右則是在Shell的子進程運行的,如果沒有括號命令echo -e "$var1 $var2"并不是和read命令同一進程運行。就會導(dǎo)致兩個變量輸出都是空。
echo "Hello, World!" | (read var1 var2; echo -e "$var1
$var2")
Hello,
World!
read 命令組合HereDoc
默認情況下,read命令將反斜杠解釋為轉(zhuǎn)義符,有時可能會導(dǎo)致意外行為。要禁用反斜杠轉(zhuǎn)義,請使用read命令的-r選項。
在使用read命令時,您應(yīng)該始終與read命令的-r選項一起使用。你可以運行命令read <<< "Hello, World!"與命令read -r <<< "Hello, World!"。
驗證在使用read的-r選項和沒有-r選項時的區(qū)別。
read <<< "Hello, World!"
read -r <<< "Hello, World!"
Hello, tWorld!
Hello, World!
read 命令提示消息
當(dāng)編寫交互式Shell腳本時,可以使用read命令獲取用戶輸入。您還可以使用read命令的-p選項,打印一條提示消息告知用戶當(dāng)前輸入在做什么操作。
如果Shell腳本要求用戶輸入敏感信息,例如密碼,可以使用read命令-s選項隱藏用戶的輸入。
例如命令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命令來強制用戶提供預(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ù)組,而不是變量名稱,請使用read命令的-a選項。
read -r -a MY_ARR <<< "Linux is awesome."
for i in "${MY_ARR[@]}"; do
echo "$i"
done
Linux
is
awesome.
結(jié)論
read命令用于將讀取用戶輸入行拆分為單詞。
-
Linux
+關(guān)注
關(guān)注
88文章
11581瀏覽量
217168 -
字符串
+關(guān)注
關(guān)注
1文章
594瀏覽量
22964 -
命令
+關(guān)注
關(guān)注
5文章
745瀏覽量
23362 -
Read
+關(guān)注
關(guān)注
0文章
10瀏覽量
11333
發(fā)布評論請先 登錄
如何在Linux使用source命令加載變量與函數(shù)
linux驅(qū)動通過uboot的變量實現(xiàn)掉電記憶
labview中如何自動保存并加載用戶信息?
C語言入門教程-Printf:讀取用戶輸入
HarmonyOS應(yīng)用開發(fā):保存到變量

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