ブレース拡張置換?

ブレース拡張置換?

スクリーンショットを撮るときに imagemagick を使用して 2 つのモニターを自動的に分割する小さな bash スクリプトを作成しました。

#! /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##*.}"

関連情報