Respuestas:
FILE=$(basename "${1/%.jpeg/.jpg}") trabajó para mi.
prueba:
bash-$ ./test.sh /tmp/foo.jpeg
foo.jpg
contenido del guión:
bash-$ cat test.sh
#!/usr/bin/bash
FILE=$(basename "${1/%.jpeg/.jpg}")
echo "$FILE"
No puede anidar expansiones en bash (ni en ksh, ash y otras conchas aparte de zsh). Esto es solo una limitación cosmética, ya que, como ilustra, puede asignar una expresión intermedia a una variable temporal. Es un poco molesto para las frases sencillas, pero en los scripts es posiblemente mejor para la legibilidad.
Podría evitar usar la utilidad externa basenamey usar una construcción de manipulación de cadenas en su lugar:
FILE="${1##*/}"; FILE="${FILE/%.jpeg/.jpg}"
Aquí, sucede que puede reescribir su script para colocar la sustitución del comando en el exterior . Ese no es un fenómeno general, ni obtienes nada más que un cierto sentimiento de una línea.
Zsh, para bien o para mal, te permite anidar expansiones:
FILE=${$(basename $1)/%.jpeg/.jpg} # using basename
FILE=${${1##*/}/%.jpeg/.jpg} # using string rewriting
O podría usar la construcción incorporada de zsh en lugar de basename:
FILE=${${1:t}/%.jpeg/.jpg}
La línea
FILE=$(basename "${1/%.jpeg/.jpg}")
se puede acortar y hacer más portátil con
FILE=$(basename "${1%.jpeg}.jpg")
sed, definitivamente será necesario, supongo.