说我是否有:
MYPATH=../Library/NetworkUtil/Classes/Headers/network.h
然后我想构建另一条路径AllHeaders/NetworkUtil/network.h
我实际上需要从原始路径中获取不同的组件,有没有办法做到这一点?
我找到了:
Bash: remove first directory component from variable (path of file)
我可以像
${MYPATH#../Library}
删除指定的部分,但这假设我已经知道结构,如果在我的情况下我需要原始路径中的第3个和最后一个组件?
由于
答案 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,但会破坏。