#!/bin/bash FILE="$(basename "$1")" FILE="${FILE/%.jpeg/.jpg}"
Van-e mód arra, hogy ezt a két vonalat egy vonalba ragasszuk?
Válasz
FILE=$(basename "${1/%.jpeg/.jpg}")
nekem működött.
teszt:
bash-$ ./test.sh /tmp/foo.jpeg foo.jpg
szkript tartalma:
bash-$ cat test.sh #!/usr/bin/bash FILE=$(basename "${1/%.jpeg/.jpg}") echo "$FILE"
megjegyzések
Válasz
Nem lehet fészkelni bővítések a bash-ban (sem a ksh-ben, sem a hamuban, sem az egyéb héjakban, kivéve a zsh-t). Ez csak kozmetikai korlátozás, mivel amint szemlélteti, egy ideiglenes változóhoz hozzárendelhet egy köztes kifejezést. Ez kissé bosszantó az egyvonalasak számára, de szkriptekben vitathatatlanul jobb az olvashatóság érdekében.
Kerülhetné az u énekeld a basename
külső segédprogramot, és használj helyette egy karakterlánc-manipulációs konstrukciót:
FILE="${1##*/}"; FILE="${FILE/%.jpeg/.jpg}"
Itt előfordulhat, hogy írja át a szkriptet úgy, hogy a parancs helyettesítése kívülre kerüljön . Ez nem általános jelenség, és nem is szerez semmi mást, mint egy bizonyos egyvonalas érzés.
A Zsh jó vagy rossz szempontból lehetővé teszi a bővítések fészkelését:
FILE=${$(basename $1)/%.jpeg/.jpg} # using basename FILE=${${1##*/}/%.jpeg/.jpg} # using string rewriting
Vagy használhatja a zsh beépített konstrukcióját a basename
helyett:
FILE=${${1:t}/%.jpeg/.jpg}
Válasz
Mennék:
FILE=$(basename $1 .jpeg).jpg
A basename második paramétere a fájlnévből eltávolítandó utótag (lásd: man basename
)
Válasz
Használhat egyetlen sed
parancsot, a következők szerint:
FILE=$(sed "s/.*\///;s/\.jpeg$/.jpg/" <<<"$1")
Válasz
A sed
befogadásával ezt kell cselekednie:
FILE="$(basename "$1" | sed s/\.jpeg$/.jpg/)"
(Ez nem felel meg pontosan a kérdésére, mert nem tudom; nem tudom, hogy lehetséges-e.)
Válasz
A Bash konstrukció változónevekkel működik, így nem lehet közvetlenül beágyazni egy parancsot. A @sr_ megközelítése alternatív, ha nem veszi figyelembe az extra villát.
Válasz
A sor
FILE=$(basename "${1/%.jpeg/.jpg}")
lerövidíthető és hordozhatóbbá tehető a
FILE=$(basename "${1%.jpeg}.jpg")
sed
feltétlenül szükség lesz erre.