一、使用${}
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 ,如需轉載請自行聯系原作者