如何从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 ,并且把它再次转换回原来的顺序。