Bon, nan, c'est tout simple: "${variable#pattern}" s'évalue en la variable (là c'était notre nom de fichier, $f) dont on retire au début (c'est l'opérateur "#" qui le dit) le pattern (dans notre cas, "??", c'est à dire deux caractères quels qu'ils soient).
Pour ta culture, les patterns peuvent être des chaines quelconques ou bien contenir des caractères spéciaux (jokers ou wildcards ou que sais-je encore), qui seront interprétés comme pour l'expansion des noms de fichiers :
- "*" reconnait une chaine quelconque (celui là t'es au moins familier dans le cas de l'expansion des noms de fichiers, genre `ls *.jpg`)
- "?" reconnait un caractère quelconque
- "[abc]" reconnait les cactères "a", "b", ou "c"
- "[0-9]" reconnait les chiffres de 0 à 9 (on aurait pu l'utiliser ici d'ailleurs, genre "album${f#[0-9][0-9]}"), "[a-z]" les lettres miniscules de "a" à "z", etc.
En plus de l'opérateur "#", y'en a qlqs autres dans le même genre:
- "##" fait presque pareil sauf qu'il choisi si ambiguité la plus longue des correspondance ("#" lui prend la plus courte, enfin de toute façon ça ne fait une différence que si on utilise "*" qui est le seul wildcard de longueur variable)
- "%" et "%%" marchent pareil, sauf qu'ils suppriment à la fin de la chaine contenue par la variable
- "/" est un opérateur de substitution:
# foo="plip plop plip plop plip"
# echo "${foo/plop/pluuuup}"
plip pluuuup plip plop plip
- "//" aussi, sauf qu'il fait autant de substitutions que possible, et pas juste la première:
# echo "${foo//plop/pluuuup}"
plip pluuuup plip pluuuup plip
Bon, maintenant `man bash` pour plus de détails et les autres opérateurs... (cherches la section "EXPANSION", sous-section "Parameter Expansion". Elle est bonne à connaitre.)
Et quant au "album" en début de chaine, je suppose que tu auras deviné :)
[^] # Re: "ren" roxor
Posté par tgl . En réponse au message Renommer plusieurs fichiers en même temps. Évalué à 5.
Argh. Pas de bol...
Enfin, tu peux toujours te l'installer from-sources si tu veux :
http://freshmeat.net/projects/ren(...)
> Peux-tu m'expliquer la syntaxe de "album${i#??}
`man bash` :p
Bon, nan, c'est tout simple: "${variable#pattern}" s'évalue en la variable (là c'était notre nom de fichier, $f) dont on retire au début (c'est l'opérateur "#" qui le dit) le pattern (dans notre cas, "??", c'est à dire deux caractères quels qu'ils soient).
Pour ta culture, les patterns peuvent être des chaines quelconques ou bien contenir des caractères spéciaux (jokers ou wildcards ou que sais-je encore), qui seront interprétés comme pour l'expansion des noms de fichiers :
- "*" reconnait une chaine quelconque (celui là t'es au moins familier dans le cas de l'expansion des noms de fichiers, genre `ls *.jpg`)
- "?" reconnait un caractère quelconque
- "[abc]" reconnait les cactères "a", "b", ou "c"
- "[0-9]" reconnait les chiffres de 0 à 9 (on aurait pu l'utiliser ici d'ailleurs, genre "album${f#[0-9][0-9]}"), "[a-z]" les lettres miniscules de "a" à "z", etc.
En plus de l'opérateur "#", y'en a qlqs autres dans le même genre:
- "##" fait presque pareil sauf qu'il choisi si ambiguité la plus longue des correspondance ("#" lui prend la plus courte, enfin de toute façon ça ne fait une différence que si on utilise "*" qui est le seul wildcard de longueur variable)
- "%" et "%%" marchent pareil, sauf qu'ils suppriment à la fin de la chaine contenue par la variable
- "/" est un opérateur de substitution:
# foo="plip plop plip plop plip"
# echo "${foo/plop/pluuuup}"
plip pluuuup plip plop plip
- "//" aussi, sauf qu'il fait autant de substitutions que possible, et pas juste la première:
# echo "${foo//plop/pluuuup}"
plip pluuuup plip pluuuup plip
Bon, maintenant `man bash` pour plus de détails et les autres opérateurs... (cherches la section "EXPANSION", sous-section "Parameter Expansion". Elle est bonne à connaitre.)
Et quant au "album" en début de chaine, je suppose que tu auras deviné :)