[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: