thisPath="/Users/admin/Sites/codebase/projects/DrawingProject"
modifiedPath="$($thisPath|rev|cut -d '/' -f-2|rev)"
printf "[[[[[ $modifiedPath ]]]]]\n"
在macOS BASH中,如何打印以下内容:
[[[[[ projects/DrawingProject ]]]]]
现在我收到一个目录错误
谢谢。-Jonathan
发布于 2017-04-19 03:07:00
一种方法是使用awk
thisPath="/Users/admin/Sites/codebase/projects/DrawingProject"
modifiedPath=$(awk -F/ '{print $(NF-1)"/"$NF}' <<< $thisPath)
printf "[[[[[ $modifiedPath ]]]]]\n"
输出:
[[[[[ projects/DrawingProject ]]]]]
发布于 2017-04-19 04:08:27
如果您的bash
支持参数展开
$ thisPath="/Users/admin/Sites/codebase/projects/DrawingProject"
$ echo "[[[[[ ${thisPath#${thisPath%/*/*}/} ]]]]]"
[[[[[ projects/DrawingProject ]]]]]
要理解这一点,请考虑其中的不同部分:
$ echo "${thisPath%/*/*}"
/Users/admin/Sites/codebase
%
用于删除字符串末尾的最小匹配值。/*/*
,因此这将删除包含/
的/projects/DrawingProject
,后面跟着任何字符,后面跟着/
,再后面跟着任何字符。类似地,#
允许从字符串的开头删除最小匹配。前任:
$ echo "${thisPath#/*/}"
admin/Sites/codebase/projects/DrawingProject
将这两个概念结合起来:
$ echo "${thisPath#${thisPath%/*/*}/}"
projects/DrawingProject
${thisPath%/*/*}
将给/Users/admin/Sites/codebase
/
/Users/admin/Sites/codebase/
将被删除,我们将得到projects/DrawingProject
发布于 2017-04-19 04:04:18
这是一个很好的答案。下面是使用basename
和dirname
的另一种方法
thisPath="/Users/admin/Sites/codebase/projects/DrawingProject"
printf "[[[[[ $(basename $(dirname $thisPath))/$(basename $thisPath) ]]]]]"
https://stackoverflow.com/questions/43485600
复制相似问题