2013-05-28 4 views
2

Existe-t-il un bon moyen d'expliquer comment fonctionne ce qui suit?

~$ echo $test 
en.to.tre 
~$ echo ${test} 
en.to.tre 
~$ echo ${test%.*} 
en.to 
~$ echo ${test%%.*} 
en 
~$ echo ${test#*.} 
to.tre 
~$ echo ${test##*.} 
tre 

En particulier, je ne comprends pas pourquoi . et * doivent être permutés lors du retrait/de maintien gauche/droite.

+2

Vous pouvez vérifier ceci: [wooledge.org - Comment utiliser l'extension des paramètres? Comment puis-je obtenir des sous-chaînes? Comment puis-je obtenir un fichier sans son extension, ou obtenir juste l'extension d'un fichier?] (Http://mywiki.wooledge.org/BashFAQ/073) – fedorqui

+4

Peut-être aussi vérifier ceci: http://tldp.org/LDP/abs /html/refcards.html#AEN22664 – devnull

Répondre

4

.* signifie "sous-chaîne commençant avec ."; *. signifie "sous-chaîne se terminant avec .". Dans la troisième et la quatrième ligne, vous supprimez la sous-chaîne la plus courte/la plus longue commençant avec . à partir de la fin; dans la cinquième et sixième ligne, vous supprimez la sous-chaîne la plus courte/la plus longue se terminant par avec . depuis le début.

Les cordes après #, %, etc., sont interprétés comme des caractères d'englobement (comme les noms de fichiers), et non pas comme des expressions régulières, donc . représente lui-même.

Questions connexes