2

我正在遍历*.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 内置的变量操作功能来完成它,因为我认为它会很方便弄清楚如何让它以这种方式工作。

4

2 回答 2

2

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

于 2012-11-12T22:56:40.763 回答
1
$ x=/foo/bar.info
$ echo ${x%.info}
/foo/bar
$ 
于 2012-11-12T22:53:20.280 回答