编写一个shell脚本,想用从一个绝对路径得到一个文件名。
直接使用basename在脚本中,莫名地报了一个permission denied的错误。
就干脆想想如何通过字符串操作来解决。搜索整理了一下:
${var#pattern} 是要将变量值左边的最短 pattern 拿掉。
${var##pattern} 是要将变量值左边的最长 pattern 拿掉。
${var%pattern} 是要将变量值右边的最短 pattern 拿掉。
${var%%pattern} 是要将变量值右边的最长 pattern 拿掉。
${var%/*} 就是将最后一个 / 及其右边的内容拿掉。
${var##*/} 就是将最后一个 / 及其左边的内容拿掉。由此可以得到文件名。
${var/a/b}把var中的'a'替换为'b'
举例:
pathname=/home/allen/shell/test.tar.gz echo ${pathname} echo ${pathname##/*/} echo ${pathname#/*/} echo ${pathname%.*} echo ${pathname%%.*} echo ${pathname/test/allen}
输出为
/home/allen/shell/test.tar.gz test.tar.gz allen/shell/test.tar.gz /home/allen/shell/test.tar /home/allen/shell/test /home/allen/shell/allen.tar.gz