Answers:
使用bash的字符串操作:
$ a=/home/myusername/folder1/folder2/folder3
$ echo "${a#/*/*/}"
folder1/folder2/folder3
因此,您想要的字符串将是(添加反斜杠):
b="/${a#/*/*/}"
对于一个变量a
,${a#foo}
将删除最短的字符串匹配foo
从开始的a
。因此,我们删除包含三个的最短字符串/
(包括路径中的前斜杠),以删除绝对路径的前两个部分。
您可以像这样使用bash参数扩展:
target_path=/home/username/folder1/folder2/folder3
myvar="/${target_path#/*/*/}"
在这之后:
echo $myvar
给出:
/folder1/folder2/folder3
/*/*/
通过使用${target_path#pattern}
shell参数扩展语法,可以从target_path变量中删除模式的第一个匹配项,从而发挥作用。不幸的是,这删除了第一个/
字符,这就是为什么在设置myvar变量时必须明确包含该字符的原因。
警告:在使用此方法之前,应检查您的target_path变量是否包含某些字符,并且长度超过两个路径段。例如,如果target_path=/home/username/
的话myvar=/
。如果您正在运行,可能会对系统造成危险rm -rf "$myvar"*
。不要尝试这个!
/home/username
的实际$HOME
目录吗?如果是这样,则可以使用mydir="${target_path#$HOME}"
我认为的方法将其删除