在跟蹤一個工程的編譯過程時,爲了方便實時變量的打印和過程的控制,想使用read讀取輸入的一個字符,然後判斷字符的值,再決定是否繼續執行,代碼如下:
#!/bin/bash
echo -e "\e[1;36m segement 1 \e[0m"
read ch
if [ $ch == "q" ];then
exit
fi
echo -e "\e[1;36m segement 2 \e[0m"
其實,如果正常輸入字符的話是沒有任何問題的,例如下面兩種不同情況的輸入結果如下圖:但是,如果執行過程沒有輸入字符,而是直接回車,那麼執行過程則會出現問題,如下圖:
原因則是:當輸入回車時,$ch是空值,相當於[ =="q" ],當然會出現問題!
解決辦法主要有2種:
1、不直接使用變量$ch,而是使用"$ch":
#!/bin/bash
echo -e "\e[1;36m segement 1 \e[0m"
read ch
if [ "$ch" == "q" ];then
exit
fi
echo -e "\e[1;36m segement 2 \e[0m"
2、加入一對中括號"[]"#!/bin/bash
echo -e "\e[1;36m segement 1 \e[0m"
read ch
if [[ $ch == "q" ]];then
exit
fi
echo -e "\e[1;36m segement 2 \e[0m"
網上還有很多在第一種解決方法的基礎上,在字符串的後面加入一個字符來解決,個人認爲還是滿可取的。