read
命令是bash內置命令,可從標準輸入或者文件描述符中讀取一行并將該行按空格拆分為多個字符串賦值給多個變量。
第一個字符串賦值給第一個變量,第二個字符串賦值給第二個變量,依此類推。如果沒有為read
命令提供變量名稱,將整行賦值給REPLY
變量。
在本教程中,我們將說明如何在Linux使用read
命令讀取用戶的輸入并保存到多個變量中。
read 命令
read命令語法形式是read [options] [name...]
。為了簡單說明read
命令的工作方式,請按快捷鍵CTRL+ALT+T
打開終端,運行命令read var1 var2
。
read
命令將會等待用戶輸入。可以輸入任意兩個字符串并使用空格進行分隔,例如輸入Hello World
。輸入完成后按Enter。
你將會發現read
命令將Hello
字符串分配給變量var1
,World
字符串賦值給變量var2
。我們可以運行命令echo
或printf
驗證打印變量驗證這一點。
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")
。這里之所以使用括號括起read
和echo
命令。
是因為管道的右則是在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文章
11351瀏覽量
210504 -
字符串
+關注
關注
1文章
585瀏覽量
20612 -
命令
+關注
關注
5文章
698瀏覽量
22126 -
Read
+關注
關注
0文章
10瀏覽量
11137
發布評論請先 登錄
相關推薦
如何在Linux使用source命令加載變量與函數
linux驅動通過uboot的變量實現掉電記憶
C語言入門教程-Printf:讀取用戶輸入
HarmonyOS應用開發:保存到變量
![HarmonyOS應用開發:<b class='flag-5'>保存到</b><b class='flag-5'>變量</b>](https://file.elecfans.com//web2/M00/47/C3/pYYBAGKetpmAKTuGAAAcaXoYnDg873.png)
評論