我正在遍历目录中的所有*.info
文件,并检查是否存在相应的*.gz
文件(如果没有,则删除.info
文件)。但要做到这一点,我需要从.info
剥离$file
。我已经在bash
中摆弄了参数替换,但似乎没有任何效果。我可以很容易地获得扩展(如下面的代码所示)但不是但扩展名。我尝试过各种我预期可能有用的东西;没有。
for file in *.info; do
gz_file="${file:(-4)}" # wrong... what is right?
# gz_file=`echo "$file" | sed -e 's/.info//'` # easy alternative I'm trying to avoid
if [[ ! -f "${gz_file}" ]]; then
rm "${file}"
fi
done
我意识到这可以通过sed
轻松完成,如注释掉的行所示,但我想用bash中内置的变量操作功能来做,如果可能的话,因为我认为找出如何让它以这种方式工作会很方便。
答案 0 :(得分:2)
你试过${file%.*}
吗?
这应该删除扩展名。
答案 1 :(得分:1)
$ x=/foo/bar.info
$ echo ${x%.info}
/foo/bar
$