linux shell命令${}和basename和dirname的学习

来源:互联网 发布:iphone6导出视频mac 编辑:程序博客网 时间:2024/06/06 00:07

1、${}

${}并不是专门为提取文件名或目录名的,它的使用是变量的提取和替换等等操作,它可以提取非常多的内容,并不一定是'/'或'.'


#:表示从左边算起第一个,如${var#/} 去掉变量var从左边算起的第一个'/'字符及其左边的内容,返回从左边算起的第一个'/'的右边的内容
%:表示从右边算起第一个,如${var%/*} 去掉变量var从右边算起的第一个'/'字符及其右边的内容,返回从右边算起的第一个'/'(不含该字符)的左边的内容
##:表示从左边算起最后一个,如${var##*.}去掉变量var从左边算起的最后一个'.'字符及其左边的内容,返回从左边算起的最后一个'.'(不含该字符)的右边的内容
%%:表示从右边算起最后一个,如${var%%.*} 去掉变量var从右边算起的最后一个'.'字符及其右边的内容,返回从右边算起的最后一个'.'(不含该字符)的左边的内容
换句话来说,#总是表示左边算起,%总是表示右边算起。

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

2、basename和dirname命令

该命令的作用是从路径中提取出文件名,使用方法为basename NAME [SUFFIX]。



例子

#!/bin/bash
var=/home/test1/file.txt
echo '-------${}----------'
echo 'Dir name:' $var
echo ${var#/}
echo '${var##*/}:' ${var##*/}
echo '${var##*.}:' ${var##*.}
echo '${var%/*}:' ${var%/*}
echo '${var%%.*}:' ${var%%.*}
echo '------basename  dirname---------------'
echo '${basename $var}:' $(basename $var)
echo "(dirname $var):" $(dirname $var)



0 0
原创粉丝点击