• basename与dirname命令解析【转】


    本文转载自:http://blog.csdn.net/choice_jj/article/details/8766335

    basename命令

    语法:basename string [suffix]

    用于返回一个字符串的基本文件名称

    basename命令读取string参数,删除以 / 结尾的前缀以及任何指定的suffix参数,并将剩余的基本文件名称写至标准输出。

    basename命令应用以下创建基本文件名称的规则:

    1· 如果 String 参数是 //(双斜杠) 或如果 String 参数包含的都是斜杠字符,则将字符串更改为单个 /(斜杠)。跳过步骤 2 到 4。

    从指定字符串除去任何拖尾的 / 字符。

    2· 如果在 String 参数中剩余任何 / 字符,则除去字符串的前缀直到(包含)最后一个 / 字符。
    3· 如果指定 Suffix 参数,且它和字符串中的剩余的字符相同,则不修改此字符串。例如,输入:
    # basename /u/dee/desktop/cns.boo cns.boo
    结果是:
    cns.boo
        如果指定 Suffix 参数,且它和字符串中所有字符都不相同,但和字符串的后缀相同,则除去指定后缀。例如,输入:
    # basename /u/dee/desktop/cns.boo .boo

    结果是:
    cns
        不能在字符串中查找到指定的后缀不作为错误处理。

    示例

    (1)要显示一个 shell 变量的基本名称,请输入:
    basename $WORKFILE
    此命令显示指定给 shell 变量 WORKFILE 的值的基本名称。如果 WORKFILE 变量的值是 /home/jim/program.c 文件,则此命令显示 program.c

    # basename /usr/bin/sort 
     # sort

    (2)要构造一个和另一个文件名称相同(除了后缀)的文件名称,请输入:
    OFILE=`basename $1 .c`.o
    此命令指定给 OFILE 文件第一个位置上的参数($1)的值,但它的 .c 后缀更改至 .o。如果 $1 是 /home/jim/program.c 文件,则 OFILE 成为 program.o。因为 program.o 仅是一个基本文件名称,它标识在当前目录中的文件。
    注:`(重音符号)指定命令替换。

    dirname命令

    用途说明
    dirname命令可以取给定路径的目录部分(strip non-directory suffix from file name)。这个命令很少直接在shell命令行中使用,我一般把它用在shell脚本中,用于取得脚本文件所在目录,然后将当前目录切换过去。根据手册页上说的“Print  NAME  with  its  trailing  /component  removed; if NAME contains no /’s, output ‘.’ (meaning the current directory).”,似乎说“取给定路径的目录部分” 并不能很准确的概括dirname命令的用途。Linux下还有一个命令是basename,它与dirname相反,是取得文件名称部分。
    常用参数
    无。
    使用示例
    示例一 来自手册页的例子
    [root@qzt196 ~]# dirname /usr/bin/sort 
    /usr/bin
    [root@qzt196 ~]# dirname stdio.h 
    .
    [root@qzt196 ~]#
    示例二
    [root@qzt196 ~]# dirname /usr/bin 
    /usr
    [root@qzt196 ~]# dirname /usr/bin/ 
    /usr
    注意:此处的输出结果,似乎有点怪。这应该看下dirname命令的源代码才能解释了。
    示例三 在bash脚本中的运用

    [cpp] view plain copy
     
    1. Bash代码    
    2. #!/bin/sh    
    3.     
    4. # 跳转到脚本所在目录    
    5. cd $(dirname "$0") || exit 1    
    6.     
    7. # 剩下的部分    



     
    这个写法我经常用到,因为有时候脚本执行时无法确定是在哪个目录,比如脚本用在crontab中时。
    另一个写法是:cd `dirname $0` 其中反引号··等同于$()。
     
    示例四 与另外一种截取目录的方法的比较
    可以用${pathname%/*}截取掉pathname后面的文件部分。
    [root@jfht ~]# pathname=/usr/bin/sort; echo $(dirname $pathname) ${pathname%/*} 
    /usr/bin /usr/bin
    [root@jfht ~]# pathname=/usr/bin/; echo $(dirname $pathname) ${pathname%/*} 
    /usr /usr/bin
    [root@jfht ~]# pathname=/usr/bin; echo $(dirname $pathname) ${pathname%/*} 
    /usr /usr
    [root@jfht ~]# pathname=/usr/; echo $(dirname $pathname) ${pathname%/*} 
    / /usr
    [root@jfht ~]# pathname=/usr; echo $(dirname $pathname) ${pathname%/*} 
    /
    [root@jfht ~]# pathname=/; echo $(dirname $pathname) ${pathname%/*} 
    /
    [root@jfht ~]# pathname=stdio.h; echo $(dirname $pathname) ${pathname%/*} 
    . stdio.h
    [root@jfht ~]#

    path            dirname         basename
    "/usr/lib"      "/usr"           "lib"
    "/usr/"         "/"              "usr"
    "usr"           "."              "usr"
    "/"             "/"               "/"
    "."             "."               "."
    ".."            "."              ".."

    参考资料:http://study.chyangwa.com/IT/AIX/aixcmds1/basename.htm

        http://codingstandards.iteye.com/blog/840784

        http://codingstandards.iteye.com/blog/800028

  • 相关阅读:
    Windows中的库编程(三、函数调用约定 Calling Convention)
    weui
    js 压缩图片
    django 跨域访问
    html5
    有用的网站
    Chrome
    srpingBoot配置多环境配置文件
    Mysql在查询时不区分大小写
    [CentOS7]Nginx 1.20.1不支持四层负载
  • 原文地址:https://www.cnblogs.com/zzb-Dream-90Time/p/7675801.html
Copyright © 2020-2023  润新知