Bash shell / Command:剥离给定路径中的任意组件?

时间:2013-12-06 06:50:22

标签: bash shell command-line bsd

说我是否有:

MYPATH=../Library/NetworkUtil/Classes/Headers/network.h

然后我想构建另一条路径AllHeaders/NetworkUtil/network.h

我实际上需要从原始路径中获取不同的组件,有没有办法做到这一点?

我找到了:

Bash: remove first directory component from variable (path of file)

我可以像

${MYPATH#../Library}

删除指定的部分,但这假设我已经知道结构,如果在我的情况下我需要原始路径中的第3个和最后一个组件?

由于

1 个答案:

答案 0 :(得分:0)

您可以使用bash数组访问各个元素:

$ MYPATH=../Library/NetworkUtil/Classes/Headers/network.h
$ OLD="$IFS"
$ IFS='/' a=($MYPATH)
$ IFS="$OLD"
$ NEWPATH="AllHeaders/${a[2]}/${a[-1]}"
$ echo $NEWPATH
AllHeaders/NetworkUtil/network.h

ADDENDUM:为了完整性,将MYPATH变为数组的另一种方法是使用bash的模式替换:a=(${MYPATH//\// })

$ MYPATH=../Library/NetworkUtil/Classes/Headers/network.h
$ a=(${MYPATH//\// })
$ NEWPATH="AllHeaders/${a[2]}/${a[-1]}"
$ echo $NEWPATH
AllHeaders/NetworkUtil/network.h

如果MYPATH开头有空格,制表符或CR,那么就不需要弄乱IFS,但会破坏