macOS Bash shell脚本中的目录截断和转换为字符串问题
在macOS BASH中,如何打印以下内容:macOS Bash shell脚本中的目录截断和转换为字符串问题,bash,macos,shell,Bash,Macos,Shell,在macOS BASH中,如何打印以下内容: thisPath="/Users/admin/Sites/codebase/projects/DrawingProject" modifiedPath="$($thisPath|rev|cut -d '/' -f-2|rev)" printf "[[[[[ $modifiedPath ]]]]]\n" 现在我得到一个目录错误 多谢各位-Jonathan一种方法是使用awk: [[[[[ projects/DrawingProject ]]]]
thisPath="/Users/admin/Sites/codebase/projects/DrawingProject"
modifiedPath="$($thisPath|rev|cut -d '/' -f-2|rev)"
printf "[[[[[ $modifiedPath ]]]]]\n"
现在我得到一个目录错误
多谢各位-Jonathan一种方法是使用
awk
:
[[[[[ projects/DrawingProject ]]]]]
这是一个很好的答案。下面是使用
basename
和dirname
[[[[[ projects/DrawingProject ]]]]]
如果您的
bash
支持
为了理解这一点,考虑它的不同部分:
$ thisPath="/Users/admin/Sites/codebase/projects/DrawingProject"
$ echo "[[[[[ ${thisPath#${thisPath%/*/*}/} ]]]]]"
[[[[[ projects/DrawingProject ]]]]]
用于从字符串末尾删除最小匹配项%
因此这将删除/*/*
中包含/projects/DrawingProject
后跟任何字符的/
,然后再后跟任何字符/
#
允许从字符串开头删除最小匹配项。例如:
$ echo "${thisPath%/*/*}"
/Users/admin/Sites/codebase
结合这两个概念:
$ echo "${thisPath#/*/}"
admin/Sites/codebase/projects/DrawingProject
将提供${thisPath%/*/*}
/Users/admin/Sites/codebase
- 然后给出额外的
/
- 因此,实际上,
将被删除,我们将得到/Users/admin/Sites/codebase/
projects/DrawingProject
mPath=$(echo“$thisPat”| rev |······················。
$ echo "${thisPath%/*/*}"
/Users/admin/Sites/codebase
$ echo "${thisPath#/*/}"
admin/Sites/codebase/projects/DrawingProject
$ echo "${thisPath#${thisPath%/*/*}/}"
projects/DrawingProject