注册 登录
编程论坛 Linux教室

问个简单的 变量定义 问题

rbhr 发布于 2010-01-08 08:43, 856 次点击
我最近看一个sh程序

NAME=${0##*/}
eval tar cf ${FILE##*/}'.tar' ${FILE##*/}'_tmp'

这个「##*/」字符串好像没用,这是什么用法,为什么这么用啊?

由于都是google的关键字,无法检索,只有发个帖子问问,谢谢高手回答了
2 回复
#2
zhddragon2010-01-18 21:04
NAME=${0##*/}
这里0是指$0 也就是脚本的名称
##是shell的一个内置的删除最长匹配子串的模式,完整的表达式是${string##substring},其中substring可以是正则表达式
*/是一个正则表达式,意思是匹配任何长度的以/结尾的字符串
整个结合起来的意思就是“删除脚本名称前面的路径部分“ 、
例如如果$0的值是/home/test.sh则执行完该句后NAME="test.sh",实现的功能很basename一样

#3
rbhr2010-01-29 17:44
本来想加15分,结果显示超过最大分值了,谢谢你,只加了1分,万分抱歉
1