#!/bin/bash FILE="$(basename "$1")" FILE="${FILE/%.jpeg/.jpg}"
Est-il possible de coller ces deux lignes ensemble en une seule ligne?
Réponse
FILE=$(basename "${1/%.jpeg/.jpg}")
a fonctionné pour moi.
test:
bash-$ ./test.sh /tmp/foo.jpeg foo.jpg
contenu du script:
bash-$ cat test.sh #!/usr/bin/bash FILE=$(basename "${1/%.jpeg/.jpg}") echo "$FILE"
Commentaires
Réponse
Vous ne pouvez pas » nicher expansions dans bash (ni dans ksh, ash et autres shells en dehors de zsh). Ceci nest quune limitation cosmétique, car comme vous lillustrez, vous pouvez affecter une expression intermédiaire à une variable temporaire. Cest un peu gênant pour les one-liners, mais dans les scripts, cest sans doute mieux pour la lisibilité.
Vous pourriez éviter u chantez lutilitaire externe basename
et utilisez une construction de manipulation de chaîne à la place:
FILE="${1##*/}"; FILE="${FILE/%.jpeg/.jpg}"
Ici, il se trouve que vous pouvez réécrivez votre script pour placez la substitution de commande à lextérieur . Ce nest pas un phénomène général, et vous ne gagnez rien dautre quune certaine sensation à une seule ligne.
Zsh, pour le meilleur ou pour le pire, vous permet dimbriquer des extensions:
FILE=${$(basename $1)/%.jpeg/.jpg} # using basename FILE=${${1##*/}/%.jpeg/.jpg} # using string rewriting
Ou vous pouvez utiliser la construction intégrée de zsh « au lieu de basename
:
FILE=${${1:t}/%.jpeg/.jpg}
Réponse
Jirais pour:
FILE=$(basename $1 .jpeg).jpg
Le deuxième paramètre du nom de base est un suffixe à supprimer du nom de fichier (voir man basename
)
Réponse
Vous pouvez utiliser une seule commande sed
comme ci-dessous:
FILE=$(sed "s/.*\///;s/\.jpeg$/.jpg/" <<<"$1")
Réponse
En intégrant sed
, cela devrait faire laffaire:
FILE="$(basename "$1" | sed s/\.jpeg$/.jpg/)"
(Cela ne répond pas exactement à votre question car je ne peux pas; je ne sais pas si cest possible.)
Réponse
The Bash fonctionnent avec des noms de variables , il ny a donc aucun moyen dincorporer une commande directement. Lapproche de @sr_ « est une alternative si vous ne vous souciez pas de la fourchette supplémentaire.
Réponse
La ligne
FILE=$(basename "${1/%.jpeg/.jpg}")
peut être raccourci et rendu plus portable avec
FILE=$(basename "${1%.jpeg}.jpg")
sed
sera certainement nécessaire, je suppose.