在 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
${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
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/222840/viewspace-694614/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/222840/viewspace-694614/