最近我观看了老男孩先生的shell编程学习的内容,(还没看完呢)讲的很不错,首先表示感谢。
在观看的过程中,有个问题我进行了测试,就是关于%和%%与#和##的用法问题,应该是类似的,我本着不求甚解的心态,将我个人测试的结果发出来,希望可以加深记忆,同时可能也会帮到有些想了解此子串应用又不求甚解的同学。
【我是新手,有什么写的不对的地方,还望各位施主能够不吝啬自己的知识,多多提出宝贵的意见以及建议,大家共同加油】
言归正传。
以下是我的操作。
首先创建如下几个文件,
[root@smoke test]# vi a.log
for i in `seq 5`;
do
echo ceshi$i.txt.tx.txt1.tx.txt2.tx.txt3>>b.log
done
~
~
"a.log" 5L, 76C written
[root@smoke test]# sh a.log
[root@smoke test]# ll
total 12
-rw-r--r--. 1 root root 76 Jun 9 16:04 a.log
-rw-r--r--. 1 root root 175 Jun 9 16:04 b.log
[root@smoke test]# more b.log
ceshi1.txt.tx.txt1.tx.txt2.tx.txt3
ceshi2.txt.tx.txt1.tx.txt2.tx.txt3
ceshi3.txt.tx.txt1.tx.txt2.tx.txt3
ceshi4.txt.tx.txt1.tx.txt2.tx.txt3
ceshi5.txt.tx.txt1.tx.txt2.tx.txt3
[root@smoke test]# for f in `cat b.log`;do touch $f;done
[root@smoke test]# ll
total 12
-rw-r--r--. 1 root root 76 Jun 9 16:04 a.log
-rw-r--r--. 1 root root 175 Jun 9 16:04 b.log
-rw-r--r--. 1 root root 0 Jun 9 16:06 ceshi1.txt.tx.txt1.tx.txt2.tx.txt3
-rw-r--r--. 1 root root 0 Jun 9 16:06 ceshi2.txt.tx.txt1.tx.txt2.tx.txt3
-rw-r--r--. 1 root root 0 Jun 9 16:06 ceshi3.txt.tx.txt1.tx.txt2.tx.txt3
-rw-r--r--. 1 root root 0 Jun 9 16:06 ceshi4.txt.tx.txt1.tx.txt2.tx.txt3
-rw-r--r--. 1 root root 0 Jun 9 16:06 ceshi5.txt.tx.txt1.tx.txt2.tx.txt3
上述操作,创建了ceshi1~5.txt.tx.txt1.tx.txt2.tx.txt3这5个文件。
[root@smoke 123]# vi p.sh
for f in `ls *.txt3`
do
mv $f ${f%tx*}123
done
~
~
"p.sh" 5L, 56C written
[root@smoke test]# sh p.sh
[root@smoke test]# ll
total 12
-rw-r--r--. 1 root root 76 Jun 9 16:04 a.log
-rw-r--r--. 1 root root 175 Jun 9 16:04 b.log
-rw-r--r--. 1 root root 0 Jun 9 16:06 ceshi1.txt.tx.txt1.tx.txt2.tx.123
-rw-r--r--. 1 root root 0 Jun 9 16:06 ceshi2.txt.tx.txt1.tx.txt2.tx.123
-rw-r--r--. 1 root root 0 Jun 9 16:06 ceshi3.txt.tx.txt1.tx.txt2.tx.123
-rw-r--r--. 1 root root 0 Jun 9 16:06 ceshi4.txt.tx.txt1.tx.txt2.tx.123
-rw-r--r--. 1 root root 0 Jun 9 16:06 ceshi5.txt.tx.txt1.tx.txt2.tx.123
-rw-r--r--. 1 root root 49 Jun 9 16:11 p.sh
利用%,实现从变量f的结尾进行对以tx*结尾的内容进行***,以及在***内容后添加123,可见此操作将最后的一个txt3***并在次位置添加了123。
以下利用%%进行测试,
[root@smoke test]# vi p.sh
for f in `ls *.123` #注意这个地方,和上面第一次的区别
do
mv $f ${f%%tx*}456
done
~
~
"p.sh" 5L, 49C written
[root@smoke test]# sh p.sh
[root@smoke test]# ll
total 12
-rw-r--r--. 1 root root 76 Jun 9 16:04 a.log
-rw-r--r--. 1 root root 175 Jun 9 16:04 b.log
-rw-r--r--. 1 root root 0 Jun 9 16:06 ceshi1.456
-rw-r--r--. 1 root root 0 Jun 9 16:06 ceshi2.456
-rw-r--r--. 1 root root 0 Jun 9 16:06 ceshi3.456
-rw-r--r--. 1 root root 0 Jun 9 16:06 ceshi4.456
-rw-r--r--. 1 root root 0 Jun 9 16:06 ceshi5.456
-rw-r--r--. 1 root root 49 Jun 9 16:15 p.sh
个人认为,以上内容可证明,%和%%的区别是从结尾***变量中最近和最远的匹配字符串的区别。
原创处女作,写的不好,勿喷,谢谢。
本文出自 “吉祥娃娃” 博客,转载请与作者联系!