C'est ce qu'on appel le "Parameter substitution"

en fait c'est
${fichier##*/}  qui veut dire supprime la plus long chaine de charactere
qui match avec */ en commencant par le debut
./titi/toto/tutu.chose devient alors
tutu.chose
${ficiher#*/} est substitue la chaine la plus courte matchant avec */ en 
commencant par la gauche
./titi/toto/tutu.chose devient alors
titi/toto/tutu.chose
${fichier%.*} substitue la chaine la plus courte matchant avec .* en 
commencant par la droite
tutu.chose devient alors
tutu

${fichier2%.txt}  sur tutu.chose ne le change pas
${fichier2%.txt}  sur tutu.txt le remplace par tutu

ca marche en posix en ksh ou en bash

l'avantage de
      fichier2 =${fichier##*/}
      fichier2 =${fichier2%.*}
sur
      fichier2=$(basename $fichier .txt)
est qu'il est entierement interprete par le shell sans coprocess.
evitant le fork/exec on evite ainsi un overhead certain.

laborde stephane wrote:
> Merci pour vos réponses. Je me doutais qu'il y avais une histoire de 
> guillemets. J'avais pas essayé les simple inversés comme ça : `
> 
> J'en profite pour poser d'autres questions pour ma culture et mon 
> apprentissage du bash...
> 
> 
> Laurent Menase a écrit :
>> find . -name \*.txt | while read fichier
>> do
>>     fichier2 =${$fichier##*/}
>>     fichier2 =${fichier2%.*}
>> done
> 
> Là, je comprends pas... A quoi servent les 2 lignes dans la boucle ? La 
> syntaxe m'est un peu opaque pour le coup.
> 


_________________________________
Linux mailing list
[email protected]
http://lists.parinux.org/mailman/listinfo/linux

Répondre à