Substituição de expansão de suporte?

1

Eu criei um pequeno script para dividir automaticamente meus dois monitores com 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ó irá renomeá-lo apropriadamente se for um png (o que neste caso não é um problema). Existe alguma maneira de fazê-lo funcionar, de modo a mover a extensão do arquivo para o final? Então, se eu chamei este script (vamos chamá-lo splitimage) em um arquivo oldscreenshot.jpg , ele me daria oldscreenshot-left.jpg e oldscreenshot-right.jpg ?

    
por Rob 25.01.2012 / 05:52

2 respostas

1

Sim, usando as expansões ${param##word} e ${param%word} . O primeiro vai se livrar da extensão, o último vai se livrar de tudo mas a 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
    
por 25.01.2012 / 05:58
1

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

convert "$1" -crop 1024x600+0+0 +repage "${1%.*}-left.${1##*.}"
    
por 25.01.2012 / 05:58