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