Pascal BOYER a �crit, jeudi 23 d�cembre 2004, � 21:20 :
> Selon Jacques L'helgoualc'h <[EMAIL PROTECTED]>:
[...]
> > Bash :
> >
> > precedent="$(ls -1tr /chemin/des/svgd/ | tail -1)"
> > n="${precedent//*[.0]}"
> > n_plus_un="$(printf '%04d' $[ n + 1 ])"
[...]
> Si t'as trois minutes, tu peux m'expliquer le principe de //*[.0] et de %04d

Au d�part, j'essaie de r�cup�rer l'extension du num�ro avec ${precedent##*.}
qui supprime tout le d�but jusqu'au dernier point :

 $ precedent=test.txt.0042
 $ n=${precedent##*.}
 $ echo $n
0042
 $ echo $[ n + 1 ]
35

Pas  glop, 0042  est en  octal ;  donc je  passe �  //*[.0],  qui bouffe
avidement tout jusqu'au dernier point ou  z�ro... ah, merde, s'il y a un
z�ro � la fin �a ne va plus !

 $ precedent=test.txt.0040
 $ n="${precedent##*.}"
 $ echo $n
0040

Faire trois fois n=${n#0} est bourrin, mais on peut pr�ciser la base :

 $ echo $[ 10#$n + 1 ]
41

Donc finalement (d�sol� pour le bug)

precedent="$(ls -1tr /chemin/des/svgd/ | tail -1)"
n="${precedent##*.}"
n_plus_un="$(printf '%04d' $[ 10#$n + 1 ])"

Le printf  '%04d' �crit le nombre  n + 1 sur  exactement quatre chiffres
d�cimaux, compl�t�s � gauche par des z�ros.


> Bonnes f�tes

Merci, et bonnes f�tes � tous
-- 
Jacques L'helgoualc'h

Répondre à