#!/bin/bash FILE="$(basename "$1")" FILE="${FILE/%.jpeg/.jpg}"
Er der alligevel noget at lime disse to linjer sammen til en en-liner?
Svar
FILE=$(basename "${1/%.jpeg/.jpg}")
fungerede for mig.
test:
bash-$ ./test.sh /tmp/foo.jpeg foo.jpg
scriptindhold:
bash-$ cat test.sh #!/usr/bin/bash FILE=$(basename "${1/%.jpeg/.jpg}") echo "$FILE"
Kommentarer
Svar
Du kan ikke rede udvidelser i bash (heller ikke i ksh, aske og andre skaller bortset fra zsh). Dette er kun en kosmetisk begrænsning, da som du illustrerer, kan du tildele et mellemliggende udtryk til en midlertidig variabel. Det er lidt irriterende for one-liners, men i scripts er det uden tvivl bedre for læsbarhed.
Du kunne undgå dig syng det eksterne værktøj basename
og brug en strengmanipulationskonstruktion i stedet:
FILE="${1##*/}"; FILE="${FILE/%.jpeg/.jpg}"
Her sker det, at du kan omskriv dit script til sæt kommandosubstitutionen udefra . Det er ikke et generelt fænomen, og du får heller ikke noget andet end en bestemt følelse af en linie.
Zsh, på godt og ondt, giver dig mulighed for at rede udvidelser:
FILE=${$(basename $1)/%.jpeg/.jpg} # using basename FILE=${${1##*/}/%.jpeg/.jpg} # using string rewriting
Eller du kan bruge zshs indbyggede konstruktion i stedet for basename
:
FILE=${${1:t}/%.jpeg/.jpg}
Svar
Jeg ville gå efter:
FILE=$(basename $1 .jpeg).jpg
Den anden parameter til basenavn er et suffiks, der skal fjernes fra filnavnet (se man basename
)
Svar
Du kan bruge en enkelt sed
-kommando som i følgende:
FILE=$(sed "s/.*\///;s/\.jpeg$/.jpg/" <<<"$1")
Svar
Indeholder sed
, dette skal gøre tricket:
FILE="$(basename "$1" | sed s/\.jpeg$/.jpg/)"
(Dette svarer ikke nøjagtigt dit spørgsmål, for jeg kan ikke; er ikke sikker på, om det er muligt.)
Svar
Bash konstruerer arbejde med variabelnavne , så der er ingen måde at integrere en kommando direkte. @sr_s tilgang er et alternativ, hvis du ikke har noget imod den ekstra gaffel.
Svar
Linjen
FILE=$(basename "${1/%.jpeg/.jpg}")
kan afkortes og gøres mere bærbare med
FILE=$(basename "${1%.jpeg}.jpg")
sed
vil jeg helt sikkert have brug for.