shell獲取文件名和文件目錄-basename和dirname
我們有時(shí)候需要獲取某個(gè)文件路徑的文件名或者文件所在目錄名,如:/usr/local/nginx/nginx.conf ,我想獲取該文件的所在目錄名 (/usr/local/nginx)以及 文件名 nginx.conf,那么如何操作呢?下面介紹兩種方法。
一、利用 ${}
1、${var##*/}
該命令的作用是去掉變量var從左邊算起的最后一個(gè)’/’ 字符及其左邊的內(nèi)容,返回從左邊算起的最后一個(gè)’/’(不含該字符)的右邊的內(nèi)容。使用例子及結(jié)果如下:
?

?
2、${var##*.}
該命令的作用是去掉變量var從左邊算起的最后一個(gè) ‘.’ 字符及其左邊的內(nèi)容,返回從左邊算起的最后一個(gè)’.’(不含該字符)的右邊的內(nèi)容。使用例子及結(jié)果如下:

?
?3、${var#*.}
該命令的作用是去掉變量var從左邊算起的第一個(gè)’.‘字符及其左邊的內(nèi)容,返回從左邊算起第一個(gè)’.’(不含該字符)的右邊部分的內(nèi)容。使用例子及結(jié)果如下:

?
4、${var%/*}
該命令的使用是去掉變量var從右邊算起的第一個(gè)’/‘字符及其右邊的內(nèi)容,返回從右邊算起的第一個(gè)’/’(不含該字符)的左邊的內(nèi)容。使用例子及結(jié)果如下:

?
?5、${var%%.*}
該命令的使用是去掉變量var從右邊算起的最后一個(gè)’.‘字符及其右邊的內(nèi)容,返回從右邊算起的最后一個(gè)’.’(不含該字符)的左邊的內(nèi)容。使用例子及結(jié)果如下:

?
?6、${}總結(jié)
${}并不是專(zhuān)門(mén)為提取文件名或目錄名的,它的使用是變量的提取和替換等等操作,它可以提取非常多的內(nèi)容,并不一定是上面五個(gè)例子中的’/‘或’.’。
#:表示從左邊算起第一個(gè)
%:表示從右邊算起第一個(gè)
##:表示從左邊算起最后一個(gè)
%%:表示從右邊算起最后一個(gè)
換句話(huà)來(lái)說(shuō),??偸潜硎咀筮吽闫?,%總是表示右邊算起。
*:表示要?jiǎng)h除的內(nèi)容,對(duì)于#和##的情況,它位于指定的字符(例子中的’/‘和’.’)的左邊,表于刪除指定字符及其左邊的內(nèi)容;對(duì)于%和%%的情況,它位于指定的字符(例子中的’/‘和’.’)的右邊,表示刪除指定字符及其右邊的內(nèi)容。這里的’'的位置不能互換,即不能把號(hào)放在#或##的右邊,反之亦然。
例如:${var%%x*}表示找出從右邊算起最后一個(gè)字符x,并刪除字符x及其右邊的字符。
二、basename和dirname
1. basename
該命令的作用是從路徑中提取出文件名,使用方法為basename NAME [SUFFIX]
(1)從路徑中提出出文件名(帶后綴),例子如下:

?
?(2)從上面命令的用法中可以看到,后綴(SUFFIX)是一個(gè)可選項(xiàng),若只想提取出文件名file,而不帶有后綴,還可以在變量的后面加上后綴名,例子如下:

?
?2. dirname
該命令的作用是從路徑中提取出目錄名,使用方法為 dirname NAME
使用例子如下:

?
?

鏈接:https://www.dianjilingqu.com/558453.html