Chinaunix

标题: 路径文件名的截取 [打印本页]

作者: sunguangshou    时间: 2010-11-30 20:57
标题: 路径文件名的截取
本帖最后由 sunguangshou 于 2010-12-04 22:36 编辑

set pfName=/home/sgs/test.txt
csh:
${pfName:r}   = /home/sgs/test
${pfName:e}  = txt
${pfName:t}   = test.txt
${pfName:h}  = /home/sgs
${pfName:r:t} = test

bash
${pfName%.*}   = /home/sgs/test
${pfName##*.} = txt
${pfName##*/} = test.txt
${pfName%/*}   = /home/sgs
${pfName}     = test (※不用其他的命令暂时不知道怎么做)

http://www.javaeye.com/topic/506188
作者: dibug    时间: 2010-11-30 21:17
沙发否?
作者: lkk2003rty    时间: 2010-11-30 22:21
没看懂啥意思
作者: L_kernel    时间: 2010-11-30 22:40
${pfName:r}?/home/sgs/test
${pfName:e}?txt
${pfName:t}?test.txt
${pfName:h}?test
字符串截取?
如果这样子,和bash还是有差别的。
作者: sunguangshou    时间: 2010-12-01 23:04
回复 4# L_kernel


跟bash是有区别的。
bash正在整理中。
谢谢各位关注。
作者: sunguangshou    时间: 2010-12-01 23:05
回复 3# lkk2003rty


就是截取一个路径和文件名变量的不同区间的值。
作者: sunguangshou    时间: 2010-12-01 23:09
回复 2# dibug


绝对的沙发。
作者: L_kernel    时间: 2010-12-02 00:47
回复  L_kernel


跟bash是有区别的。
bash正在整理中。
谢谢各位关注。
sunguangshou 发表于 2010-12-01 23:04



    bash中的文件名的截取还是非常好记的。
作者: sunguangshou    时间: 2010-12-02 10:45
bash中的文件名的截取还是非常好记的。
L_kernel 发表于 2010-12-02 00:47



大哥你能完善一下吗?
作者: L_kernel    时间: 2010-12-02 11:06
大哥你能完善一下吗?
sunguangshou 发表于 2010-12-02 10:45
  1. $ pfName=/home/sgs/test.txt

  2. # 获取全路径文件名
  3. $ echo $pfName
  4. /home/sgs/test.txt

  5. # 获取文件名
  6. $ echo ${pfName##*/}
  7. test.txt

  8. # 获取该文件的位置
  9. $ echo ${pfName%/*}
  10. /home/sgs

  11. # 获取文件的后缀名
  12. $ echo ${pfName##*.}
  13. txt

  14. # 仅仅获取文件的前缀
  15. $ echo ${pfName##*/} | sed -r 's/^(.*)\..*$/\1/g'
  16. test
复制代码

作者: sunguangshou    时间: 2010-12-04 22:18
回复 10# L_kernel


$ pfName=/home/sgs/test.txt
# 仅仅获取文件的前缀
$ echo ${pfName##*/} | sed -r 's/^(.*)\..*$/\1/g'
test

这个不是很满意,但是谢谢你了。
作者: L_kernel    时间: 2010-12-05 00:50
是我太菜了。
作者: sunguangshou    时间: 2010-12-07 14:07
回复 12# L_kernel


你不菜,:  )是我要求太高了。

瞎调侃一下,兄台不要见怪。
作者: davidbeckham921    时间: 2010-12-07 18:07
本帖最后由 davidbeckham921 于 2010-12-07 18:13 编辑

我也有过同样的困惑应该是跟这个一个意思吧
echo ${${pfName##*/}/.txt/}
或者是
echo ${${pfName##*/}%.*}这个意思
但是这样写会报错,不知道怎么改能好使
作者: sunguangshou    时间: 2010-12-08 10:10
我也有过同样的困惑应该是跟这个一个意思吧
echo ${${pfName##*/}/.txt/}
或者是
echo ${${pfName##*/}% ...
davidbeckham921 发表于 2010-12-07 18:07



跟你说的差不多了.
我也不会,但是我相信能.
:  )
作者: davidbeckham921    时间: 2010-12-10 17:23
黑哥,tim,小毛孩,苍狗,三轮哥等高手给解释解释吧。

要不都烙下心病了!~~能那么干么?
作者: L_kernel    时间: 2010-12-11 09:53
我也有过同样的困惑应该是跟这个一个意思吧
echo ${${pfName##*/}/.txt/}
或者是
echo ${${pfName##*/}% ...
davidbeckham921 发表于 2010-12-07 18:07



    这个我想过很多回了。我得出的结果就是,只能在变量后面对它进行一次这种操作。
作者: sunguangshou    时间: 2010-12-18 23:40
黑哥,你就解释解释吧。

tcsh里可以这样用。
$ pfName=/home/sgs/test.txt
echo ${pfName:r:t} == test
大家可以试试。
作者: sunguangshou    时间: 2010-12-18 23:41
回复 14# davidbeckham921


tcsh里可以这样用。
$ pfName=/home/sgs/test.txt
echo ${pfName:r:t} == test
大家可以试试。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2