红联Linux门户
Linux帮助

求教,请讲解下linux中的分割,请见正文

发布时间:2012-05-30 15:08:37来源:红联作者:halupipi
如:
${0##*/}
${0#*/}
这个两个命令有什么区别,

同理
${0%%a*b}
${0%a*b} 有什么区别

${1:1} 还有这个是什么意思?
文章评论

共有 5 条评论

  1. hcc 于 2012-05-31 23:21:42发表:

    自己用简单的实例测试先

  2. sauntor 于 2012-05-30 23:28:58发表:

    可以像下面这样运行上面的代码示例:[code]
    ./test_expansion.sh 一二三 SecondParameter
    [/code]

  3. sauntor 于 2012-05-30 23:25:40发表:

    现看下面的脚本:[code]# 文件名:test_expansion.sh
    #!/bin/bash

    filename=${0##*/}
    fileext=${0##*.}
    filebasename=${filename%.$fileext}

    echo "脚本的执行路径是 \"$0\""
    echo "脚本的文件名是 \"$filename\""
    echo "脚本的扩展名是 \"$fileext\""
    echo "文件基本名称是 \"$filebasename\""
    echo "第一个参数是 \"$1\""
    echo "第一个参数的第3个字符是 \"${1:2:1}\""
    echo "第一个参数第2个字符后的文字是 \"${1:1}\""
    [/code]部分解释:
    [list=1]
    [*]${0##*/}代表截去$0变量(也就是当前执行命令)中/之前的所有字符,即:##代表在变量开始处截断,前面是被截变量名,后面是待截去的字符串模式
    [*]${filename%.$fileext}代表截去$filename末尾的.$fileext(此处将展开为.sh),即:%代表在变量结尾处截断,前面是被截变量名,后面是待截去的字符串模式
    [*]${1:1}代表从$1中下标为1(从0开始)的字符开始截取子串,即:${PARAM:OFFSET:LEN}代表从OFFSET下标处开始,在$PARAM变量中截取长度为LEN的子串,若省略:LEN则代表截到$PARAM结尾处
    [*]##和#、%%和%的区别是,双字符的进行最大匹配,单字符进行最小匹配,例如:var1=avaliable, %%a*e会匹配aliable,但%a*e只会匹配able
    [/list]

    希望对你有所帮助,如有疑问可详细参考bash 的 info手册 。

  4. wonderful5115 于 2012-05-30 16:26:57发表:

    这个不懂呀

  5. halupipi 于 2012-05-30 15:08:53发表:

    自己先顶起来