我正在迭代目录中的所有*.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
$