shell中的四種模式匹配


POSIX為shell為進行模式匹配提供了四種參數替換結構(老版本的shell可能不支持),每種結構有兩個參數:變量名(或變量號)及模式。
第一種模式:
   ${variable%pattern},這種模式時,shell在variable中查找,看它是否一給的模式pattern結尾,如果是,就從命令行把variable中的內容去掉右邊最短的匹配模式
第二種模式:
   ${variable%%pattern},這種模式時,shell在variable中查找,看它是否一給的模式pattern結尾,如果是,就從命令行把variable中的內容去掉右邊最長的匹配模式
第三種模式:
   ${variable#pattern} 這種模式時,shell在variable中查找,看它是否一給的模式pattern開始,如果是,就從命令行把variable中的內容去掉左邊最短的匹配模式
第四種模式:
   ${variable##pattern} 這種模式時,shell在variable中查找,看它是否一給的模式pattern結尾,如果是,就從命令行把variable中的內容去掉右邊最長的匹配模式
這四種模式中都不會改變variable的值,其中,只有在pattern中使用了*匹配符號時,%和%%,#和##才有區別。

[root@root shell]# var=testcase
[root@root shell]# echo $var
testcase
[root@root shell]# echo ${var%s*e} 從最右邊刪除最短匹配
testca
[root@root shell]# echo $var
testcase
[root@root shell]# echo ${var%%s*e} 從最右邊刪除最長匹配
te
[root@root shell]# echo $var  變量沒有改變
testcase
[root@root shell]# echo ${var#?e} 從最左邊刪除最短匹配
stcase
[root@root shell]# echo $var
testcase
[root@root shell]# echo ${var#*e}  從最左邊刪除最短匹配
stcase
[root@root shell]# echo $var
testcase
[root@root shell]# echo ${var##*e} 從最左邊刪除最長匹配,即刪除所有

[root@root shell]# echo $var
testcase
[root@root shell]# echo ${var##*s} 從最左邊刪除最長匹配
e
[root@root shell]# echo $var
testcase
[root@root shell]# echo ${var#test} 刪除test
case
[root@root shell]# echo $var
testcase
[root@root shell]# echo ${var#tests} 沒有匹配
testcase
[root@root shell]#

另外
var=97%
var=${var%s?}
echo $var #打印97


免責聲明!

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



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