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