Risposte:
FILE=$(basename "${1/%.jpeg/.jpg}")
ha funzionato per me.
test:
bash-$ ./test.sh /tmp/foo.jpeg
foo.jpg
contenuto della sceneggiatura:
bash-$ cat test.sh
#!/usr/bin/bash
FILE=$(basename "${1/%.jpeg/.jpg}")
echo "$FILE"
Non puoi nidificare espansioni in bash (né in ksh, ash e altre shell a parte zsh). Questa è solo una limitazione estetica, poiché, come illustrato, è possibile assegnare un'espressione intermedia a una variabile temporanea. È un po 'fastidioso per i one-liner, ma negli script è probabilmente migliore per la leggibilità.
È possibile evitare di utilizzare l'utilità esterna basename
e utilizzare invece un costrutto di manipolazione di stringhe:
FILE="${1##*/}"; FILE="${FILE/%.jpeg/.jpg}"
Qui, succede che puoi riscrivere il tuo script per mettere il comando di sostituzione all'esterno . Questo non è un fenomeno generale, né ottieni altro che una certa sensazione di una linea.
Zsh, nel bene e nel male, ti consente di nidificare espansioni:
FILE=${$(basename $1)/%.jpeg/.jpg} # using basename
FILE=${${1##*/}/%.jpeg/.jpg} # using string rewriting
Oppure potresti usare il costrutto incorporato di zsh invece di basename
:
FILE=${${1:t}/%.jpeg/.jpg}
La linea
FILE=$(basename "${1/%.jpeg/.jpg}")
può essere ridotto e reso più portatile con
FILE=$(basename "${1%.jpeg}.jpg")
sed
sarà sicuramente necessario, immagino.