bash中的basename与dirname以及${}


var=/dir1/dir2/file.tar.gz

basename $var        #获取文件名

file.tar.gz

dirname $var            #获取目录名称

/dir1/dir2

dirname $(dirname $var)   #获取上级目录的名称

/dir1

echo ${var##*/}       #删除左起最后一个/及其左边的字符串

file.tar.gz

echo ${var##*.}       #删除左起最后一个.及其左边的字符串

gz

echo ${var #*.}     #删除左起第一个.及其左边的字符串

tar.gz

echo ${var%/*}      #删除右起第一个/及右边的字符

/dir1/dir2

echo ${var%%.*}   #删除右起最后一个.及右边的字符

/dir1dir2/file

echo ${#var}         #等价于 echo -n $var | wc -c ,求字符串长度

22

echo ${var:0:5}     #两个数字分别为起始地址和截取长度

/dir1

echo ${var/dir/path}  #替换第一个dir为path

/path1/dir2/file.tar.gz

echo ${var//dir/path}  #替换左右dir为path

/path1/path2/file.tar.gz

${}并不是专门为提取文件名或目录名的,它的使用是变量的提取和替换等等操作,它可以提取非常多的内容,并不一定是上面五个例子中的'/'或'.'。也就是说,上面的使用方法只是它使用的一个特例。

看到上面的这些命令,可能会让人感到非常难以理解和记忆,其实不然,它们都是有规律的。
#:表示从左边算起第一个
%:表示从右边算起第一个
##:表示从左边算起最后一个
%%:表示从右边算起最后一个
换句话来说,#总是表示左边算起,%总是表示右边算起。

*:表示要删除的内容,对于#和##的情况,它位于指定的字符(例子中的'/'和'.')的左边,表于删除指定字符及其左边的内容;对于%和%%的情况,它位于指定的字符(例子中的'/'和'.')的右边,表示删除指定字符及其右边的内容。这里的'*'的位置不能互换,即不能把*号放在#或##的右边,反之亦然。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM