Linux Shell指令碼攻略學習總結:三 根據副檔名切分檔案名稱首先,我們先來看兩個例子:[delphi] file_jpg="sample.jgp" name=${file_jpg%.*} echo File name is : $name 輸出結果: File name is sample [delphi] extension=${file_jpg#*.} echo Extension is : $extension 輸出結果:Extension is : jpg 工作原理在第一個任務中,為了從“名稱.副檔名”中取得檔案的名字,我們使用了%操作符${$var%.*}的含義是:1.從$var中刪除位元於%右側的萬用字元所匹配的字串。萬用字元從右向左進行匹配2.給var賦值,所以結果會輸出檔案名 %屬於非貪婪操作。它從右向左找出匹配萬用字元的最短結果。還有一個操作符 %% 。這個操作符與 % 相似,但行為模式確實貪婪的,這意味著它會匹配合格最長的字串。 在第二個任務中,原理是和 % 相似的,只是它的運行過程是從左至右。操作符 ## 則用 *. 從左至右執行貪婪匹配。 展示一個例子:其中 URL=“www.google.com” 批量重新命名檔案下面這個例子實現的是批量處理檔案重新命名操作,支援的格式豐富:首先,我們需要在目錄下放置測試的圖片,如所示: 其中rename.sh就是實現功能的指令檔,我們運行指令碼程式,得到如下所示的輸出: 我們再來看看檔案的狀態是不是真的改變了: 下面給出實現的指令碼程式:[delphi] #!/bin/bash #rename.sh count=1; for img in *.[jJ][pP][gG] *.[pP][nN][gG] do new=image-$count.${img##*.} mv "$img" "$new" 2> /dev/null if [ $? -eq 0 ] then echo "Renaming $img to $new" let count++; fi done