Chinaunix首页 | 论坛 | 博客
  • 博客访问: 73309
  • 博文数量: 21
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 190
  • 用 户 组: 普通用户
  • 注册时间: 2015-08-09 17:02
个人简介

专注

文章分类

全部博文(21)

文章存档

2015年(21)

我的朋友

分类: LINUX

2015-08-11 20:00:20

        在研究/etc/init.d/xxx下脚本的公共条用脚本"/etc/init.d/functions"中遇到一些特殊语法,特研究如下:
<1>${1##[-+]}
以下待研究====================>
url: />

使用shell也有一段时间了,第一看到这么写的,也算是学习吧。

虽然,没找到官方给出的解释,但是做了几个实验也基本上能看出这个符号的作用。


1. 我的脚本是这样写的

a="abcdefg"
echo ${1#$a}

运行

~$ bash -x test.sh  abcdef
+ a=abcdefg
+ echo abcdef
abcdef
~$ bash -x test.sh  abcdefg
+ a=abcdefg
+ echo
~$ bash -x test.sh  abcdefgk
+ a=abcdefg
+ echo k
k


2. 脚本是这样写的

a="abcdefg"
echo ${0#$a}

运行结果

~$ bash -x test.sh abcdefgkk/
+ a=abcdefg
+ echo test.sh
test.sh

3. 脚本是这样写的

a="abcdefg"
echo ${2#$a}
~$ bash -x test.sh  abcdefgkk/
+ a=abcdefg
+ echo
~$ bash -x test.sh  abcdefgkk/ abc
+ a=abcdefg
+ echo abc
abc
~$ bash -x test.sh  abcdefgkk/ abcdefgh
+ a=abcdefg
+ echo h
h


经过一些列尝试,得到以下结论

对于${1#$a}这条语句

  1. 在#前面的数字代表着第几个参数(0号参数是脚本本身的名字)

  2. 其作用是用来和之后的a变量中的内容进行对比。

    2.1 当第一个参数的内容的长度小于a字符串长度时,以第一个参数中的内容为这个变量最后的内容。

    (例如:a=abcdefg, $1=aaa,$最终=aaa)

    2.2 当第一个参数的内容的与a字符串长度相同时,且内容不同时,也以第一个参数中的内容为变量最后的内容

    (例如:a=abcdefg, $1=sjdxkdj,$最终=sjdxkdj)

    2.3 当第一个参数的长度与a字符串长度相同,且内容相同时,变量最终内容为空。

    (例如:a=abcdefg, $1=abcdefg,$最终=)

    2.4 当第一个参数的长度大于a字符串长度,且第一个参数中从第一个字符起,不以a内容为子集,变量会以第一个参数的内容为变量最后内容。

    (例如:a=abcdefg, $1=accdefg,$最终=accdefg)

    2.5 当字符串长度大于第一个参数字符串长度,且第一个参数中从第一个字符起,以a内容为子集,最终变量会得到第一个参数内容消去a中内容后的值。(例如,a=abcdefg, $1=abcdefgh,$最终=h)




这样就基本了解了这里#的使用办法。


至于最后的“/”,明显是凑字符的。

说明一下:

last_part=${1#$(dirname $1)/}

输入:./test.sh   /home/breeze/ideploy/20140508090116.57/


dirname $1  --> /home/breeze/ideploy

可以推断出

$(dirname $1)/ --> /home/breeze/ideploy/


然后根据上面的规则

/home/breeze/ideploy/ 与  /home/breeze/ideploy/20140508090116.57/ 用#处理,

得到的自然就是20140508090116.57/ 


如还有不明,请追问
阅读(474) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~