在shell腳本中,發(fā)現(xiàn)case語(yǔ)句的一個(gè)問(wèn)題。
就是指定小寫字母[a-z]和大寫字母[A-Z]的這種方法不管用了。
出現(xiàn)如下情況:
可以看到當(dāng)輸入大小寫字母都會(huì)輸出“Lowercase letter”
就當(dāng)我疑惑不解的時(shí)候,奇跡發(fā)生了。。。。
當(dāng)輸入大寫Z的時(shí)候,終于出現(xiàn)了我們想要的結(jié)果:Uppercase letter
后來(lái)在man bash文檔中也沒(méi)有關(guān)于"-"代表范圍的說(shuō)明,值說(shuō)想匹配"-",就把"-"放到[]中最前面或者最后面。
case word in [ [(] pattern [ | pattern ] ... ) list ;; ] ... esac
A case command first expands word, and tries to match it against each pattern in turn, using the same matching rules as for pathname
expansion (see Pathname Expansion below). The word is expanded using tilde expansion, parameter and variable expansion, arithmetic sub-
stitution, command substitution, process substitution and quote removal. Each pattern examined is expanded using tilde expansion, param-
eter and variable expansion, arithmetic substitution, command substitution, and process substitution. If the shell option nocasematch is
enabled, the match is performed without regard to the case of alphabetic characters. When a match is found, the corresponding list is
executed. If the ;; operator is used, no subsequent matches are attempted after the first pattern match. Using ;& in place of ;; causes
execution to continue with the list associated with the next set of patterns. Using ;;& in place of ;; causes the shell to test the next
pattern list in the statement, if any, and execute any associated list on a successful match. The exit status is zero if no pattern
matches. Otherwise, it is the exit status of the last command executed in list.
再看下面這段代碼:
可以看出來(lái)它的編碼方式是:aAbBcCdDeE...yYzZ
所以才會(huì)出現(xiàn)這種情況。這也算是一個(gè)小bug吧,如果想真的想達(dá)到我們想要的結(jié)果,可以用posix的[:upper:]。
個(gè)人想法:有時(shí)候出現(xiàn)這種情況也不是個(gè)壞事,或許還可以利用這個(gè)bug去做點(diǎn)事。
新聞熱點(diǎn)
疑難解答
圖片精選