Bash变量修剪技术问询:如何将wordpress.tar.gz处理为wordpress
解决Bash中修剪文件名后缀的问题
我来帮你搞定这个问题!你的原脚本有两个小问题,咱们一步步修正:
原脚本的错误点
- 直接写
$dir | sed...是不对的:$dir是字符串wordpress.tar.gz,不是可执行命令,运行时会报错找不到这个命令,得用echo "$dir"把变量内容传递给sed。 - sed的正则表达式写错了:你要去掉的是
.tar.gz后缀,但你的正则写的是-.tar.gz,而且正则里的.需要转义(因为.在正则中代表任意字符),还要加上$确保只替换结尾的后缀。
方法1:修正后的sed版本
#!/bin/bash dir="wordpress.tar.gz" echo "$dir" RELEASE=$(echo "$dir" | sed "s/\.tar\.gz$//") echo "${RELEASE}"
运行后就能输出wordpress了。这里的正则\.tar\.gz$表示精准匹配字符串结尾的.tar.gz,避免误替换文件名中间出现类似字符的情况。
方法2:Bash内置参数扩展(推荐)
其实Bash本身就有处理字符串后缀的能力,不用调用外部的sed命令,更高效简洁:
#!/bin/bash dir="wordpress.tar.gz" echo "$dir" RELEASE="${dir%.tar.gz}" echo "${RELEASE}"
这个语法的意思是:${变量名%后缀}会从变量的结尾删除最短匹配的后缀内容,完美适配你的需求。如果你的文件名是my-wordpress.tar.gz,用这个方法也能正确得到my-wordpress。
内容的提问来源于stack exchange,提问作者NasKar
相关产品推荐
相关产品推荐

