在 bash 中,如何获取没有带有参数替换的最终扩展名的文件名



我正在迭代目录中的所有*.info文件,并检查是否有相应的*.gz文件(如果没有,则删除.info文件)。 但要做到这一点,我需要从$file上剥离.info. 我已经摆弄了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 中内置的变量操作功能来做到这一点,因为我认为弄清楚如何让它以这种方式工作会很方便。

你试过${file%.*}吗?这应该删除扩展。

$ x=/foo/bar.info
$ echo ${x%.info}
/foo/bar
$ 

相关内容

  • 没有找到相关文章

最新更新