如何从Bash中的string中删除最后n个字符?

我有一个variablesvar在Bash脚本中持有一个string,如:

 echo $var "some string.rtf" 

我想删除这个string的最后4个字符,并将结果赋给一个新的variablesvar2 ,这样

 echo $var2 "some string" 

我怎样才能做到这一点?

你可以这样做:

 #!/bin/bash v="some string.rtf" v2=${v::-4} echo "$v --> $v2" 

要从string末尾移除四个字符,请使用${var%????}

在决赛后删除所有内容. 使用${var%.*}

使用可变扩展/子串replace :

$ {VAR /%图案/换货}

如果var的后缀匹配Pattern,则将replacereplace为Pattern。

所以你可以这样做:

 ~$ echo ${var/%????/} some string 

或者,

如果你总是有相同的4个字母

 ~$ echo ${var/.rtf/} some string 

如果它总是以.xyz结尾:

 ~$ echo ${var%.*} some string 

你也可以使用string的长度:

 ~$ len=${#var} ~$ echo ${var::len-4} some string 

或简单地echo ${var::-4}

你可以使用sed,

 sed 's/.\{4\}$//' <<< "$var" 

例:

 $ var="some string.rtf" $ var1=$(sed 's/.\{4\}$//' <<< "$var") $ echo $var1 some string 

对我有效的是:

 echo "hello world" | rev | cut -c5- | rev # hello w 

但是我用它来修剪文件中的行,这就是为什么它看起来很尴尬。 真正的用途是:

 cat somefile | rev | cut -c5- | rev 

cut只会让你从一些起始位置进行修剪,如果你需要长度可变的行,这是不好的。 所以这个解决scheme把string反转(现在),现在我们把它和它的结束位置联系起来,然后使用上面提到的cut ,并且把它再次转换回原来的顺序。