Замена расширения скобы?

Замена расширения скобы?

Я создал небольшой 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.jpgи oldscreenshot-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##*.}"

Связанный контент