Shell path analyze: basename or filename

    技术2025-09-25  128

    在 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
    最新回复(0)