我有一个变量var在Bash脚本中持有一个字符串:

echo $var
"some string.rtf"

我想删除这个字符串的最后四个字符,并将结果分配给一个新变量var2,以便

echo $var2
"some string"

我该怎么做呢?


当前回答

通过计算字符串的大小,这为我工作。 很容易,你需要回显你需要返回的值,然后像下面这样存储它

removechars(){
        var="some string.rtf"
        size=${#var}
        echo ${var:0:size-4}  
    }
    removechars
    var2=$?

一些字符串

其他回答

使用变量展开/子字符串替换:

$ {var / %模式/替代} 如果var的后缀匹配Pattern,则用Replacement替换Pattern。

所以你可以这样做:

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

另外,

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

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

如果它总是以。xyz结尾:

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

你也可以使用字符串的长度:

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

或者直接返回${var::-4}

我尝试了以下方法,对我很有效:

#! /bin/bash

var="hello.c"
length=${#var}
endindex=$(expr $length - 4)
echo ${var:0:$endindex}

输出:冥界

你可以这样做(在bash v4和更高版本中):

#!/bin/bash

v="some string.rtf"

v2=${v::-4}

echo "$v --> $v2"

注意:macos使用bash 3。默认为X

要从字符串末尾删除四个字符,请使用${var%????}。

去掉所有的东西,包括最后的。使用$ {var %。*}。

更多信息请参见Bash的参数展开文档。

希望下面的例子能有所帮助,

echo ${名称:0:$((${#名称}-10 ))} --> ${ 名称:开始:len}

在上面的命令中,name是变量。 Start是字符串的起始点 Len是必须删除的字符串长度。

例子:

    read -p "Enter:" name
    echo ${name:0:$((${#name}-10))}

输出:

    Enter:Siddharth Murugan
    Siddhar

注意:Bash 4.2增加了对负子字符串的支持