删除 shell 变量中路径的最后两个路径组件

问题描述 投票:0回答:5

我有一个变量

var=/usr/local/bin/test/exec

现在我必须删除上面变量中的最后 2 个路径组件:

var=/usr/local/bin/

删除最后 2 个字符串后,我必须在 shell 循环中使用此变量“var”。

我尝试过:

  var='/usr/local/bin/test/exec'
  echo ${var#$(dirname "$(dirname "$s")")/}
  

输出:

test/exec

我得到了截断的部分作为输出,但我期待的是该部分的其余部分,而不是截断的部分。

shell variables replace
5个回答
2
投票

您可能对 shell 的内部子字符串处理运算符感兴趣:

%
%%
#
##
。观察:

#!/bin/sh

var=/usr/local/bin/test/exec

# use shell substring processing to cut the variable down to size:

var="${var%/*}"
var="${var%/*}"

echo "$var" 

# Manipulate the resulting string in a loop
for i in 1 2 3
do echo "${var}${i}"
done

0
投票

如果您不知道字段数,有一个标准的

awk
解决方案。 不过,我将使用
rev

展示另一个技巧
var='/usr/local/bin/test/exec'; echo $var | rev | cut -d/ -f3- | rev

会给

/usr/local/bin

0
投票

这个方法你也可以试试

var=/usr/local/bin/test/exec

sed 's_\(.*\)/.*/.*$_\1_' <<< $var

另一种方法

sed 's_\(.*\)\(/.*\)\{2\}$_\1_' <<< $var

输出:

/usr/local/bin

0
投票

这是当路径段数量未知时使用

awk
的解决方案。

> echo '/usr/local/bin/test/exec' | awk 'NF{NF-=2}1' FS='/' OFS='/'
/usr/local/bin

-1
投票

好吧,经过一番谷歌搜索后,我找到了解决方案:

var1="$(echo $var | cut -d '/' -f-4)"
© www.soinside.com 2019 - 2024. All rights reserved.