LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 691|回复: 2

请教个脚本问题

[复制链接]
发表于 2010-6-29 18:47:20 | 显示全部楼层 |阅读模式
if [ -n "$1" -a "$1" != "${1//[^0-9]/}” ];then

==》${1//[^0-9]/}这句怎么理解啊 $1为脚本第一个参数。
发表于 2010-6-30 03:13:50 | 显示全部楼层
判断$1是以数字开头?
-----------------
更改:^理解错误。正确的是判断$1包含字母
回复 支持 反对

使用道具 举报

发表于 2010-6-30 14:12:36 | 显示全部楼层

模式替换

${1//[^0-9]/}是模式替换。格式是${parameter/pattern/string}。这里的parameter是1,pattern是"/^[0-9]",string被省略了,我觉得解释为空。pattern以斜杠开头是说在$parameter中所有的匹配都替换为string。所以${1//[^0-9]/}就是将位置变量$1中所有的非数字([^0-9])替换为空。
参见man bash 中 EXPANSION小节。

${parameter/pattern/string}
              Pattern substitution.  The pattern is expanded to produce a pattern just as in pathname expansion.
              Parameter is expanded and the longest match of pattern against its value is replaced with  string.
              If  pattern  begins  with  /,  all matches of pattern are replaced with string.  Normally only the
              first match is replaced.  If pattern begins with #, it must match at the beginning of the expanded
              value  of  parameter.  If pattern begins with %, it must match at the end of the expanded value of
              parameter.  If string is null, matches of pattern are deleted and the / following pattern  may  be
              omitted.  If parameter is @ or *, the substitution operation is applied to each positional parame‐
              ter in turn, and the expansion is the resultant list.  If parameter  is  an  array  variable  sub‐
              scripted  with  @ or *, the substitution operation is applied to each member of the array in turn,
              and the expansion is the resultant list.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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