basename and dirname

basename
从文件名中去掉路径信息, 只打印出文件名. 结构 basename $0 可以让脚本知道它自己的名字, 也就是, 它被调用的名字. 可以用来显示用法信息, 比如如果你调用脚本的时候缺少参数, 可以使用如下语句:
echo "Usage: `basename $0` arg1 arg2 ... argn"

dirname
从带路径的文件名中去掉文件名, 只打印出路径信息.

basename 和 dirname 可以操作任意字符串. 参数可以不是一个真正存在的文件, 甚至可以不是一个文件名

export命令
可以将一个局部变量提供给Shell执行的其他命令使用,其格式为: export 变量名
也可以在给变量赋值的同时使用export命令: export 变量名=变量值
使用export说明的变量,在Shell以后运行的所有命令或程序中都可以访问到。

PWD
当前工作目录的绝对路径名,该变量的取值随cd命令的使用而变化


bn=`basename $0`
echo $bn
echo $0
echo ${bn##*/}

dn=`dirname $PWD`
echo $PWD
echo $dn
echo ${dn%/*}

#在 bash 中的变量调用处理中,
#${var#pattern} 是要将变量值左边的最短pattern 拿掉。
#${var##pattern} 是要将变量值左边的最长pattern 拿掉。
#因此,${var##*/} 就是将最后一个/ 及其左边的内容拿掉。

#${var%pattern} 是要将变量值右边的最短pattern 拿掉。
#${var%%pattern} 是要将变量值右边的最长pattern 拿掉。
#因此,${var%/*} 就是将最后一个/ 及其右边的内容拿掉。

#来玩个实验好了:
#当FNAME="/home/kenny/tmp/test.1.sh" 的时候﹕
#${FNAME} 显示变数值的全部。 /home/kenny/tmp/test.1.sh

#${FNAME##/*/} 比对变数值开端﹐如果以/*/ 开头的话﹐砍掉最长的部份。 test.1.sh

#${FNAME#/*/} 比对变数值开端﹐如果以/*/ 开头的话﹐砍掉最短的部份。 kenny/tmp/test.1.sh

#${FNAME%.*} 比对变数值末端﹐如果以.* 结尾的话﹐砍掉最短的部份。 /home/kenny/tmp/test.1

#${FNAME%%.*} 比对变数值末端﹐如果以.* 结尾的话﹐砍掉最长的部份。 /home/kenny/tmp/test

#${FNAME/sh/bash} 如果在变数值中找到sh 的话﹐将第一个sh 换成bash。 /home/kenny/tmp/test.1.bash

#${FNAME//sh/bash} 如果在变数值中找到sh 的话﹐将全部sh 换成bash。 /home/kenny/tmp/test.1.bash

作者: niustar   发布时间: 2010-10-08