我有一个变量var在Bash脚本中持有一个字符串:
echo $var
"some string.rtf"
我想删除这个字符串的最后四个字符,并将结果分配给一个新变量var2,以便
echo $var2
"some string"
我该怎么做呢?
我有一个变量var在Bash脚本中持有一个字符串:
echo $var
"some string.rtf"
我想删除这个字符串的最后四个字符,并将结果分配给一个新变量var2,以便
echo $var2
"some string"
我该怎么做呢?
当前回答
这也可以做到:
... | head -c -1
-c, --bytes=[-]NUM
print the first NUM bytes of each file; with the leading '-', print all but the last NUM bytes of each file
其他回答
在这种情况下,您可以使用basename,假设您在要删除的文件上有相同的后缀。
例子:
basename -s .rtf "some string.rtf"
这将返回"some string"
如果你不知道后缀,并希望它删除后面的所有内容,包括最后一个点:
f=file.whateverthisis
basename "${f%.*}"
输出“文件”
%表示切,。你砍的是*是通配符吗
你可以用sed,
sed 's/.\{4\}$//' <<< "$var"
例子:
$ var="some string.rtf"
$ var1=$(sed 's/.\{4\}$//' <<< "$var")
$ echo $var1
some string
我尝试了以下方法,对我很有效:
#! /bin/bash
var="hello.c"
length=${#var}
endindex=$(expr $length - 4)
echo ${var:0:$endindex}
输出:冥界
希望下面的例子能有所帮助,
echo ${名称:0:$((${#名称}-10 ))} --> ${ 名称:开始:len}
在上面的命令中,name是变量。 Start是字符串的起始点 Len是必须删除的字符串长度。
例子:
read -p "Enter:" name
echo ${name:0:$((${#name}-10))}
输出:
Enter:Siddharth Murugan
Siddhar
注意:Bash 4.2增加了对负子字符串的支持
上面的答案不适合我,因为mac os x附带了不同版本的bash。
我像这样使用sed:
var2=`echo $var2 | sed 's/.$//'`
删除最后一个字符
var2=`echo $var2 | sed 's/..$//'`
删除最后2个字符。