shell script 在if 的判斷條件正則表達式=~中引號問題


shell script 在if 的判斷條件正則表達式=~中引號問題

今天在腳本里運行if判斷的時候,總是進不了對應的分支,檢查正則表達式也沒有錯誤。單獨拿到shell里面執行還是顯示沒有匹配。比較奇怪,就搜了下,才發現是在=~ 后面的正則表達式上不能加上引號,而且以點代表任意字符,最后面是不能加上(.)*來匹配接完的。

 

下面是搜到的部分信息:

一個匹配ip地址的測試,結果匹配不了:

newip='192.168.1.1' if [[ "$newip" =~ '^([0-9]{1,3}\.){3}[0-9]{1,3}$' ]];then echo '找到了ip地址' fi 

翻遍了google中的中文資料,都沒發現問題。最后終於用英文搜到《Advanced Bash-Scripting Guide》中的一篇介紹Bash版本的文章,其中寫道:

The =~ Regular Expression match operator no longer requires quoting
of the pattern within [[ … ]].

把測試條件換成下面這樣就成功了。

if [[ "$newip" =~ ^([0-9]{1,3}.){3}[0-9]{1,3}$ ]];then # if [[ "$newip" =~ $reg ]]也可以寫成if [[ $newip =~ $reg ]] 或者[[ 2.22.29 =~ ^[0-9]{1,2}.[0-9]{1,2}.[0-9]{1,2}$ ]] && echo 1 || echo 0 .... fi 

使用變量的時候,是可以使用引號的:

newip='192.168.1.100' reg='^([0-9]{1,3}.){3}[0-9]{1,3}$' if [[ "$newip" =~ $reg ]];then echo '找到了ip地址' fi 

但是,對於 $reg 這個變量,在 [[]] 操作符中,就不能加上雙引號,否則也會不匹配。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM