Re: [HS]parametre de script
Cédric Lucantis a écrit, lundi 5 mars 2007, à 21:36 :
> Le lundi 5 mars 2007 21:19, Remi Suinot a écrit :
> > bonsoir à tous,
bonsoir,
> > je suis en train de faire un script, ou l'utilisateur passe en nom de
> > fichier en entrée: ~/bin/convert.sh toto.rm
> > j'ai utilisé ceci pour récupérer le nom du fichier sans l'extension:
> > nom=`echo $1 | cut -d "." -f 1 `
[...]
>
> une solution spécifique à bash (je crois) : nom="${1%.*}"
Bah non, ça marche aussi avec sh, zsh, dash --- mais pas (t)csh, tout de
même :)
> (l'operateur % supprime le plus court suffixe correspondant au motif)
>
> attention, un fichier sans extension te donnera des resultats bizarres, par
> exemple './toto.dir/tata' renverra './toto' Tu peux éviter ça en utilisant
> basename/dirname
ou encore
chemin="${1%/*}"
nom="${1##*/}"
base_nom="${nom%.*}"
# ou plus précis et direct,
nom_mp3="${nom%.rm}.mp3"
,---- Lu sur la liste linux-nantes :
| Pour les amoureux du bash, voici un basename en bash qui fonctionnera au
| moins 10x (*) plus vite (parce qu'on ne lance pas de processus) :
|
| function basename2() { local f=${1##*/}; echo ${f%$2}; }
|
| Le deuxième effet bashcool, c'est que la commande
| $ mon_basename fic '.*'
| enlèvera n'importe quelle extension, ce que ne sait pas faire basename
|
| Xavier Hienne
|
| (*) 25x chez moi - YMMV
`----
> une autre avec sed (même probleme) : nom=`echo "$1" | sed 's,\..*$,,g'`
sans le problème,
sed -e 's,\.[^.]*,,' # ou \+ au lieu de *, pour garder un point final.
--
Jacques L'helgoualc'h
Reply to: