括号扩展替换?

括号扩展替换?

我编写了一个小型 bash 脚本,以便在我截屏时使用 imagemagick 自动分割我的两个显示器。

#! /bin/bash
convert "$1" -crop 1024x600+0+0 +repage "${1//.png/}-left.png"
convert "$1" -crop 1280x1024+1024+0 +repage "${1//.png/}-right.png"

这很有效,但只有当它是 png 时才能正确重命名(在这种情况下这不是问题)。有没有办法让它工作,以便将文件扩展名移到末尾?所以如果我在文件上调用这个脚本(我们称之为 splitimage),oldscreenshot.jpg它会给我oldscreenshot-left.jpgoldscreenshot-right.jpg

答案1

是的,使用${param##word}${param%word}扩展。第一个将删除扩展,最后一个将删除所有内容扩展

#! /bin/bash

convert "$1" -crop 1024x600+0+0 +repage "${1%.*}-left.${1##*.}"
convert "$1" -crop 1280x1024+1024+0 +repage "${1%.*}-right.${1##*.}"

例子

$ var=foo.jpg; echo "No extention: ${var%.*} | Extention only: ${var##*.}"
No extention: foo | Extention only: jpg

答案2

是的。但在你的参数扩展不是括号扩展,那是完全不同的东西)而不是替换。

convert "$1" -crop 1024x600+0+0 +repage "${1%.*}-left.${1##*.}"

相关内容