昨天經歷了判斷字串的折磨後,其實真正在應用上我們會發現『判斷字串是否完全吻合,好像不是那麼好用』
那如果到逢甲呢? .....
『問世間情為何物,真的讓人看不透也猜不透』
昨天經歷了判斷字串的折磨後,其實真正在應用上我們會發現『判斷字串是否完全吻合,好像還是不夠用』
沒錯!其實真正在應用上除了判斷字串之外,還有另一個更常用到,那就是-判斷關鍵字或者模糊的判斷或者只判斷開頭是不是某個字或者…(好像講太多了,下雨啦~快收衣服阿~ …),反正就是看下去吧
#!/bin/bash
echo -n "你好!請輸入一個單字:"
read MY_WORD
if [ "$MY_WORD" == "Pajace2001" ]; then
echo "你輸入的不是 Pajace2001 "
elif [ "$MY_WORD" == "Pajace9527" ]; then
echo "你輸入的是 Pajace9527"
elif [[ $MY_WORD == Pajace* ]]; then
echo "你輸入的是 Pajace 開頭的字 - $MY_WORD "
elif [[ $MY_WORD =~ Pajace ]]; then
echo "你輸入的是含有 Pajace 字 - $MY_WORD "
else
echo "你輸入的是 $MY_WORD "
fi
有發現什麼不一樣的地方了嗎?沒錯!就是多了一個正規劃的判斷式(=~)
和萬用字元(*),至於什麼是正規化我就先不介紹了,萬用字元(*)應該大家都知道吧。對正規劃有興趣的人可以參考鳥哥的正規表示法介紹,相信一定會很有收穫。
注意!!因為我們使用到正規劃的判斷式(=~),所以這個判斷式要使用雙中括號包起來,另外含有萬用字元(*)的那個字串不可以用雙引號圍住,否則就會判斷錯誤喔!如果你是個好奇寶寶,想知道為什麼的話,可以用昨天介紹的 set –xv自個兒去探個險~你就會明白為什麼了,很有趣吧!動手試試會得到更多!去吧~
我來看看執行的結果:
這樣清楚了嗎?所以是「清晰好,還是朦朧好」,答案是:「都好」。
那『媽媽跟老婆掉到水裡要先救誰?』答案是:
突然想到以前老師的一個冷笑話:『如果你到逢甲夜市……………要吃小吃』
鐵人賽文章分享
上一篇 2001和9527傻傻分不清楚
下一篇 迴圈之一 for NO.1
雖然已經過了三年,留言也不知道作者是否會看到,甚至回答。但本魯正在學習Shell Script,對於最後一段
else
echo "你輸入的是 $MY_WORD ""
感覺好像沒有效果,甚至可以說沒有必要。這樣對嗎?
是阿,這是當初寫的時候沒考慮到的
應該會被前面的判斷式給攔下來
想不到作者出面回答問題,售後服務真是一級棒!!!
這樣本魯的疑惑就解開了~~~還有後面20多天,搞不好還會陸續產生問題,再請版主多多指導了!!
為何萬用字元(*)
不能使用雙引號圍住? 實測set -xv之後,該判斷式變成\P\a\j\a\c\e*,但不是很懂真正的含意
+ '[' P == Pajace2001 ']'
+ '[' P == Pajace9527 ']'
+ [[ P == \P\a\j\a\c\e\* ]]
+ [[ P =~ Pajace ]]
+ echo '你輸入的是 P '
你輸入的是 P