在 bash 中的變量調用處理中, ${var#pattern} 是要將變量值左邊的最短 pattern 拿掉。 ${var##pattern} 是要將變量值左邊的最長 pattern 拿掉。 因此,${var##*/} 就是將最後一個 / 及其左邊的內容拿掉。 ${var%pattern} 是要將變量值右邊的最短 pattern 拿掉。 ${var%%pattern} 是要將變量值右邊的最長 pattern 拿掉。 因此,${var%/*} 就是將最後一個 / 及其右邊的內容拿掉。 來玩個實驗好了: 當 FNAME="/home/kenny/tmp/test.1.sh" 的時候﹕ ${FNAME} 顯示變數值的全部。 /home/kenny/tmp/test.1.sh ${FNAME##/*/} 比對變數值開端﹐如果以 /*/ 開頭的話﹐砍掉最長的部份。 test.1.sh ${FNAME#/*/} 比對變數值開端﹐如果以 /*/ 開頭的話﹐砍掉最短的部份。 kenny/tmp/test.1.sh ${FNAME%.*} 比對變數值末端﹐如果以 .* 結尾的話﹐砍掉最短的部份。 /home/kenny/tmp/test.1 ${FNAME%%.*} 比對變數值末端﹐如果以 .* 結尾的話﹐砍掉最長的部份。 /home/kenny/tmp/test ${FNAME/sh/bash} 如果在變數值中找到 sh 的話﹐將第一個 sh 換成 bash。 /home/kenny/tmp/test.1.bash ${FNAME//sh/bash} 如果在變數值中找到 sh 的話﹐將全部 sh 換成 bash。 /home/kenny/tmp/test.1.bash |
Shell path analyze: basename or filename
最新推荐文章于 2024-06-27 10:24:31 发布