basename 和 dirname

1.basename
basename去掉带有路径的文件的路径部分。

如:

1
2
# basename /home/onlyring/bdname.ksh
bdname.ksh


在利用basename 去掉文件路径部分的时候,可以同时去掉文件名的后缀。

1
2
# basename /home/onlyring/bdname.ksh .ksh
bdname

去掉指定后缀要注意以下几点:
(1).你可以指定文件名的其他部分,不一定要后缀部分,如:

1
2
#basename /home/onlyring/bdname.ksh e.ksh
bdnam

(2).一定要按照从后到前的顺序来指定,如果不是这样,那么将不起任何作用,如:

1
2
# basename /home/onlyring/bdname.ksh bd
bdname.ksh

(3).不能将这个文件名整个文件名都指定,否则不起作用

1
2
# basename /home/onlyring/bdname.ksh onlyring/bdname.ksh
bdname.ksh

2.dirname
dirname 和basename 正好相反,dirname是去带路径文件的路径部分
如:

1
2
# dirname /home/onlyring/bdname.ksh
/home/onlyring

basename 命令处理流程

1.如果参数字符串是null(什么都不输入),输出结果不确定是.或是null.(linux提示参数太少错误,solaris输出”.”),
两种情况下都不执行2-6步骤。

2.如果参数字符串是”//”,执行和不执行步骤3-6有系统部署决定,效果是一样的

3.如果参数字字符串都是由”/”组成,不管有多少个,都将被置为单个”/”字符串。跳过步骤4-6.
如:

1
2
     $ basename ////////////
       /

4.如果字符串尾部有”/”,删除”/”.
如:

1
2
    $ basename /home/h/b/onlyring/
      onlyring

5.如果字符串中仍有”/”,整个字符串最后一个”/”,包括”/”前面的字符都被移除。

6.如果命令带有和剩余字符串不完全一致的后缀操作数,也就是说只是剩余字符串的部分后缀,
那么这个后缀部分将被从剩余字符串中移除,否则,什么都不做。
如果后缀字符在剩余字符串中没有匹配成功,系统不认为是错误,系统不会多次做任何操作。

将处理结果输出到标准输出设备

dirname 命令处理流程

1.如果参数字符字符串是”//”,跳过步骤2-5

2.如果这个字符穿都是由”/”组成,字符串被处理成单个”/”舒服,跳过步骤3-8

3.如果字符串末尾有任何”/”字符,删除该”/”。

4.如果字符串中没有”/”存在,输出字符串被置为”.”(period character)

5.如果字符串尾部有任何”/”,删除这些”/”

6.如果剩余字符串是”//”,执行和不执行步骤7-8有系统部署决定,效果是一样的

7.如果字符串尾部有”/”,删除该”/”

8.如果剩余字符串为空,输出字符串被设置为单个”/”

将处理结果输出到标准输出设备

示例:

?View Code GETTEXT
1
2
3
4
5
6
7
8
9
path            dirname         basename
"/usr/lib"      "/usr"          "lib"
"/usr/"         "/"             "usr"
"usr"           "."             "usr"
"/"             "/"             "/"
"///"           "/"             "/"
"."             "."             "."
".."            "."             ".."
host            "."             "host"

Leave a Reply

 

 

 

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

*