设为首页 收藏本站
查看: 826|回复: 0

关于shell变量的最长匹配问题

[复制链接]

尚未签到

发表于 2018-8-30 07:44:17 | 显示全部楼层 |阅读模式
  最近我观看了老男孩先生的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
  个人认为,以上内容可证明,%和%%的区别是从结尾***变量中最近和最远的匹配字符串的区别。
  原创处女作,写的不好,勿喷,谢谢。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-558642-1-1.html 上篇帖子: shell脚本之变量替换 下篇帖子: shell中的if表达式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表