天天看點

shell 提取檔案名和目錄名的一些方法

一、使用${}

1、${var##*/}

該指令的作用是去掉變量var從左邊算起的最後一個'/'字元及其左邊的内容,傳回從左邊算起的最後一個'/'(不含該字元)的右邊的内容。使用例子及結果如下:

[linux@test: ] var=/home/user/1.txt

[linux@test: ] echo ${var##*/}

1.txt

該操作提取路徑下的檔案名1.txt

2、${var##*.}

該指令的作用是去掉變量var從左邊算起的最後一個'.'字元及其左邊的内容,傳回從左邊算起的最後一個'.'(不含該字元)的右邊的内容。使用例子及結果如下:

[linux@test: ] echo ${var##*.}

txt

該操作提取字尾名

3、${var#*.}

該指令的作用是去掉變量var從左邊算起的第一個'.'字元及其左邊的内容,傳回從左邊算起第一個'.'(不含該字元)的右邊部分的内容。使用例子及結果如下:

[linux@test: ] var=/home/user/game.tar.gz

[linux@test: ] echo ${var#*.}

tar.gz

該操作可以提取出檔案的多個字尾

4、${var%/*}

該指令的使用是去掉變量var從右邊算起的第一個'/'字元及其右邊的内容,傳回從右邊算起的第一個'/'(不含該字元)的左邊的内容。使用例子及結果如下:

[linux@test: ] echo ${var%/*}

/home/user

該操作提取出檔案所在的目錄

5、${var%%.*}

該指令的使用是去掉變量var從右邊算起的最後一個'.'字元及其右邊的内容,傳回從右邊算起的最後一個'.'(不含該字元)的左邊的内容。使用例子及結果如下

[linux@test: ] echo ${var%%/.*}

/home/user/1

看到上面的這些指令,可能會讓人感到非常難以了解和記憶,其實不然,它們都是有規律的。

#:表示從左邊算起第一個

%:表示從右邊算起第一個

##:表示從左邊算起最後一個

%%:表示從右邊算起最後一個

換句話來說,#總是表示左邊算起,%總是表示右邊算起。

*:表示要删除的内容,對于#和##的情況,它位于指定的字元(例子中的'/'和'.')的左邊,表于删除指定字元及其左邊的内容;對于%和%%的情況,它位于指定的字元(例子中的'/'和'.')的右邊,表示删除指定字元及其右邊的内容。這裡的'*'的位置不能互換,即不能把*号放在#或##的右邊,反之亦然。

二、basename和dirname

${}并不是專門為提取檔案名和目錄名設計的指令,那麼basename和dirname指令就是專門為做這一件事而已準備的了。

1、basename

該指令的作用是從路徑中提取出檔案名,使用方法為basename NAME [SUFFIX]。

1)從路徑中提出出檔案名(帶字尾),例子如下:

[linux@test: ] echo ${basename $var}

2)從上面指令的用法中可以看到,字尾(SUFFIX)是一個可選項。是以,若隻想提取出檔案名file,而不帶有字尾,還可以在變量的後面加上字尾名,例子如下:

[linux@test: ] echo ${basename $var .txt}

1

2、dirname

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

[linux@test: ] dirname $var

該指令不僅能提取出普通檔案所的目錄,它能提取出任何檔案所在的目錄,例如目錄所在的目錄,如下:

[linux@test: ] var=/home/user

/home

本文轉自super李導51CTO部落格,原文連結:http://blog.51cto.com/superleedo/1976049 ,如需轉載請自行聯系原作者

繼續閱讀