Substituição de expansão de chave?

Substituição de expansão de chave?

Eu criei um pequeno script bash para dividir automaticamente meus dois monitores com o imagemagick quando faço uma captura de tela.

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

Isso funciona muito bem, mas só o renomeará corretamente se for um png (o que neste caso não é um problema). Existe alguma maneira de fazê-lo funcionar para mover a extensão do arquivo para o final? Então, se eu chamasse esse script (vamos chamá-lo de splitimage) em um arquivo, oldscreenshot.jpgele me daria oldscreenshot-left.jpge oldscreenshot-right.jpg?

Responder1

Sim, usando as expansões ${param##word}e ${param%word}. O primeiro vai se livrar da extensão, o último vai se livrar de tudomasa extensão

#! /bin/bash

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

Exemplo

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

Responder2

Sim. Mas use stripping em seuexpansão de parâmetros(nãoexpansão de chave, isso é algo completamente diferente) em vez de substituição.

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

informação relacionada