Answers:
这听起来像你想的基本部分的的目录名称:
$ filepath=/a/b/c/d/file
$ parentname="$(basename "$(dirname "$filepath")")"
$ echo "$parentname"
d
dirname
命令将假定它位于当前目录(也称为“。”)中。
parentname="$(basename "$(dirname "$pwd")")"
PWD
必须大写。尝试parentname="$(basename "$(dirname "$PWD")")"
。
我认为这是一种资源较少的解决方案:
$ filepath=/a/b/c/d/file
$ echo ${${filepath%/*}##*/}
d
编辑:对不起,嵌套扩展在bash中是不可能的,但是在zsh中有效。Bash版本:
$ filepath=/a/b/c/d/file
$ path=${filepath%/*}
$ echo ${path##*/}
d
filepath=file
或filepath = / file`。
foofile
什么?如果不是完整路径,则无法知道(也许foofile
是一个现有文件,而不仅仅是一个“字符串”)。
在bash中,一行:
$ dirname /a/b/c/d/file | sed 's,^\(.*/\)\?\([^/]*\),\2,'