关于bash:从包含路径的变量中删除当前目录

Remove current directory from variable containing path

我有一个包含当前目录的变量,其中包括几个父目录。例如:

1
2
3
4
$ pwd
/Users/simont/repositories
$ echo $current
~/repositories

我可以从这个问题中去掉除当前目录之外的所有内容:

1
onlycurrent=${$(current)##*/}

我想做相反的事情:从这个变量中删除当前目录(这样它只包含~/)。我该怎么做?


使用dirname可以去掉最后一个目录:

1
2
3
4
5
$ current="~/repositories"
$ echo $current
~/repositories
$ dirname $current
~

诚然,这并不能将/字符保留在~的右侧。

如果您只想使用bash,您可以这样做:

1
2
$ echo ${current%/*}
~

在最后一个/之后(包括/本身),一切都被剥离了。


这并不能完全解决您的问题,但您可能需要查看dirname(和basename)。

1
2
3
4
5
6
7
8
/home/or..product/oracle10 >pwd
/home/oracle/product/oracle10

/home/or..product/oracle10 >dirname `pwd`
/home/oracle/product

/home/or..product/oracle10 >basename `pwd`
oracle10

顺便说一句:dirname并不关心返回的字符串是否真的是directoy,它适用于任意字符串。

1
2
/home/or..product/oracle10 >dirname"/foo/bar/baz"
/foo/bar