#!/bin/bash FILE="$(basename "$1")" FILE="${FILE/%.jpeg/.jpg}"
Esiste comunque per incollare queste due linee insieme in una riga?
Risposta
FILE=$(basename "${1/%.jpeg/.jpg}")
ha funzionato per me.
test:
bash-$ ./test.sh /tmp/foo.jpeg foo.jpg
contenuto dello script:
bash-$ cat test.sh #!/usr/bin/bash FILE=$(basename "${1/%.jpeg/.jpg}") echo "$FILE"
Commenti
Risposta
Non puoi” nidificare espansioni in bash (né in ksh, ash e altre shell oltre a zsh). Questa è solo una limitazione cosmetica, poiché come illustrato è possibile assegnare unespressione intermedia a una variabile temporanea. È un po fastidioso per le battute, ma negli script è probabilmente migliore per la leggibilità.
Potresti evitare u cantare lutilità esterna basename
e utilizzare invece un costrutto di manipolazione delle stringhe:
FILE="${1##*/}"; FILE="${FILE/%.jpeg/.jpg}"
Qui, succede che puoi riscrivi il tuo script in per mettere la sostituzione del comando allesterno . Questo non è un fenomeno generale, né ottieni nientaltro che una certa sensazione di battuta.
Zsh, nel bene e nel male, ti consente di annidare espansioni:
FILE=${$(basename $1)/%.jpeg/.jpg} # using basename FILE=${${1##*/}/%.jpeg/.jpg} # using string rewriting
Oppure puoi utilizzare il costrutto integrato di zsh “invece di basename
:
FILE=${${1:t}/%.jpeg/.jpg}
Risposta
Vorrei:
FILE=$(basename $1 .jpeg).jpg
Il secondo parametro di basename è un suffisso da rimuovere dal nome del file (vedi man basename
)
Risposta
Puoi utilizzare un singolo comando sed
come illustrato di seguito:
FILE=$(sed "s/.*\///;s/\.jpeg$/.jpg/" <<<"$1")
Risposta
Incorporando sed
, questo dovrebbe fare il trucco:
FILE="$(basename "$1" | sed s/\.jpeg$/.jpg/)"
(Questo” t non risponde esattamente alla tua domanda perché non posso “non essere sicuro che sia possibile.)
Risposta
The Bash funzionano con nomi di variabili , quindi non cè modo di incorporare direttamente un comando. Lapproccio di @sr_ “s è unalternativa se non ti dispiace il fork in più.
Answer
La riga
FILE=$(basename "${1/%.jpeg/.jpg}")
può essere accorciato e reso più portabile con
FILE=$(basename "${1%.jpeg}.jpg")
sed
sarà sicuramente necessario immagino.