2010-03-21 7 views
1

Voici un exemple pour obtenir différentes parties d'un nom de fichiercorrespondant à Bash

bash-3.2$ pathandfile=/tmp/ff.txt 
bash-3.2$ filename=$(basename $pathandfile) 
bash-3.2$ echo $filename  
ff.txt  
bash-3.2$ echo ${filename##*.}  
txt  
bash-3.2$ echo ${filename%.*}  
ff  

Je me demandais qu'est-ce que ## et% signifie dans les modèles. Comment fonctionne la correspondance de patten?

Merci pour votre intérêt!

Répondre

4

La page de manuel pour bash dit:

$ {paramètre} # mot
$ {paramètre} ## mot

Supprimer le motif prefix correspondant. Le mot est développé pour produire un motif au même titre que dans l'extension de chemin. Si le motif correspond au début de la valeur du paramètre, le résultat de l'expansion est la valeur étendue du paramètre avec le motif correspondant le plus court (le cas #) ou le motif correspondant le plus long (le cas ##) supprimé. Si le paramètre est @ ou *, l'opération de suppression de modèle est appliquée à chaque paramètre de position l'un après l'autre, et l'expansion est la liste résultante . Si le paramètre est une variable de tableau indicée avec @ ou *, l'opération de suppression de motif est appliquée à chaque membre de la matrice à son tour, et l'extension est la liste résultante.

$ {paramètre}% mot
$ {paramètre %% mot}

Supprimer motif suffixe correspondant. Le mot est développé pour produire un motif au même titre que dans l'extension de chemin. Si le motif correspond à la partie finale de la valeur , le résultat de l'expansion est la valeur étendue du paramètre avec le motif correspondant le plus court (cas %) ou le motif correspondant le plus long (cas %%) supprimé. Si le paramètre est @ ou *, l'opération de suppression de motif est appliquée à chaque paramètre positionnel, et l'extension est la liste résultante . Si le paramètre est une variable de tableau indicée avec @ ou *, l'opération de suppression de modèle est appliquée à chaque membre de la matrice, et l'extension est la liste résultante.

2

Voir http://tldp.org/LDP/abs/html/string-manipulation.html.

  • ${string##substring}
    • Supprime le plus long match de l'avant $ sous-chaîne de chaîne de $.
  • ${string%substring}
    • match le plus court Supprime $ de sous-chaîne arrière de $ string.
+2

Et un mnémonique pour '#' (dièse) est la 'tête', et un mnémonique pour '%' (pour cent) est 'queue'. –

+3

Et, sur les claviers anglais US qwerty, "#" est à la * gauche * de "$" et "%" est à la * droite * de "$". –