#!/bin/bash FILE="$(basename "$1")" FILE="${FILE/%.jpeg/.jpg}"
Finns det någonstans att limma dessa två rader ihop till en enfodrad?
Svar
FILE=$(basename "${1/%.jpeg/.jpg}")
fungerade för mig.
test:
bash-$ ./test.sh /tmp/foo.jpeg foo.jpg
skriptinnehåll:
bash-$ cat test.sh #!/usr/bin/bash FILE=$(basename "${1/%.jpeg/.jpg}") echo "$FILE"
Kommentarer
Svar
Du kan inte bo utvidgningar i bash (inte heller i ksh, ask och andra skal förutom zsh). Detta är bara en kosmetisk begränsning, eftersom du som illustrerar kan tilldela ett mellanuttryck till en tillfällig variabel. Det är lite irriterande för en-liners, men i skript är det förmodligen bättre för läsbarheten.
Du kan undvika dig sjunga det externa verktyget basename
och använd en strängmanipulationskonstruktion istället:
FILE="${1##*/}"; FILE="${FILE/%.jpeg/.jpg}"
Här händer det att du kan skriv om ditt skript för att placera kommandosubstitutionen på utsidan . Det är inte ett allmänt fenomen, och du får inte heller något annat än en viss känsla med en liner.
Zsh, på gott och ont, låter dig bygga utvidgningar:
FILE=${$(basename $1)/%.jpeg/.jpg} # using basename FILE=${${1##*/}/%.jpeg/.jpg} # using string rewriting
Eller så kan du använda zsh ”s inbyggda konstruktion istället för basename
:
FILE=${${1:t}/%.jpeg/.jpg}
Svar
Jag skulle gå för:
FILE=$(basename $1 .jpeg).jpg
Den andra parametern till basnamn är ett suffix som ska tas bort från filnamnet (se man basename
)
Svar
Du kan använda ett enda sed
-kommando som i följande:
FILE=$(sed "s/.*\///;s/\.jpeg$/.jpg/" <<<"$1")
Svar
Inkluderar sed
, detta borde göra tricket:
FILE="$(basename "$1" | sed s/\.jpeg$/.jpg/)"
(Detta svarar inte exakt på din fråga för jag kan inte; inte säker på om det är möjligt.)
Svar
Bash konstruerar arbete med variabelnamn , så det finns inget sätt att bädda in ett kommando direkt. @sr_s tillvägagångssätt är ett alternativ om du inte har något emot den extra gaffeln.
Svar
Raden
FILE=$(basename "${1/%.jpeg/.jpg}")
kan förkortas och göras mer portabelt med
FILE=$(basename "${1%.jpeg}.jpg")
sed
kommer definitivt att behövas antar jag.