Vous n'êtes pas identifié(e).
L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT →
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente Prochaine révision Les deux révisions suivantes | ||
doc:programmation:shells:bash-les-differents-caracteres-speciaux [03/07/2014 23:12] captnfab [Shell BASH] |
doc:programmation:shells:bash-les-differents-caracteres-speciaux [04/07/2014 10:29] Hypathie [Métacaractères et méta-caractères !] |
||
---|---|---|---|
Ligne 120: | Ligne 120: | ||
<note tip> | <note tip> | ||
**Pour connaître le statut d'une commande, avec bash, on peut utiliser la commande interne type**:\\ | **Pour connaître le statut d'une commande, avec bash, on peut utiliser la commande interne type**:\\ | ||
- | <code user> | + | <code user>type cd</code> |
- | type cd | + | <code>cd est une primitive du shell |
- | cd est une primitive du shell | + | |
</code> | </code> | ||
- | <code user> | + | <code user>type cp</code> |
- | type cp | + | <code>cp est /bin/cp</code> |
- | cp est /bin/cp | + | |
- | </code> | + | |
- | <code user>type sleep | + | <code user>type sleep</code> |
- | sleep est /bin/sleep | + | <code>sleep est /bin/sleep</code> |
- | </code> | + | |
//''/bin/commande'' signifie donc que c'est une commande externe.// | //''/bin/commande'' signifie donc que c'est une commande externe.// | ||
- | <code user> | + | <code user>type ls</code> |
- | type ls | + | <code>ls est un alias vers « ls --color=auto »</code> |
- | ls est un alias vers « ls --color=auto » | + | |
- | </code> | + | |
- | <code user>whereis ls | + | <code user>whereis ls</code> |
- | ls: /bin/ls /usr/share/man/man1/ls.1.gz | + | <code>ls: /bin/ls /usr/share/man/man1/ls.1.gz</code> |
- | </code> | + | |
- | <code user>which ls | + | <code user>which ls</code> |
- | /bin/ls | + | <code>/bin/ls</code> |
- | </code> | + | |
//''ls'' est donc l'alias de la commande externe ''/bin/ls''// | //''ls'' est donc l'alias de la commande externe ''/bin/ls''// | ||
</note> | </note> | ||
Ligne 263: | Ligne 255: | ||
===== Métacaractères et méta-caractères !===== | ===== Métacaractères et méta-caractères !===== | ||
- | ==== Définition courante de métacaractère et détail ==== | + | ==== Définition usuelle de métacaractère et détail ==== |
* Un métacaractère (en anglais, wild card ou joker) est un caractère qui représente un ou plusieurs autres caractères qui eux sont interprétés littéralement. | * Un métacaractère (en anglais, wild card ou joker) est un caractère qui représente un ou plusieurs autres caractères qui eux sont interprétés littéralement. | ||
Ligne 277: | Ligne 269: | ||
| brackets | [ ] (plage de caractères [12] ou union [1-3]) || | | brackets | [ ] (plage de caractères [12] ou union [1-3]) || | ||
- | * D'autre part, man glob et man bash les appellent au contraire caractères génériques.\\ | + | * Attention à la confusion !\\ |
- | En effet, une chaîne de caractères ordinaires est un motif. Et un motif contenant un ou plusieurs "caractères géniriques" est appelé un "motif générique". | + | Man glob et man bash appellent ces caractères, non pas des métacaractères mais caractères génériques(( Et un enchaînement de motifs génériques est nommée par extension, une expression générique. |
- | + | En effet, une chaîne de caractères ordinaires est un motif. Et un motif contenant un ou plusieurs "caractères génériques" est appelé un "motif générique".)).\\ | |
- | Les caractères génériques servent à évoquer un ou plusieurs caractères ; mais aussi l'emplacement d'un et/ou plusieurs caractères. | + | |
- | + | ||
- | Quant au globbing, cela concerne l'opération qui permet d'invoquer par un motif générique, une liste de noms de fichiers pouvant correspondre à ce motifs. | + | |
- | + | ||
- | Un enchaînement de motifs génériques est nommée par extension, //une expression générique//. | + | |
- | + | ||
- | Dans la terminologie de man bash, il s'agit bien des mêmes caractères recouvrant la même fonction. Bref, Un caractère générique est une sous-classe de ce qui y est appelé caractère spécial et renvoie à la fonction de globbing. | + | |
+ | * Quant au globbing, cela concerne l'opération qui permet d'invoquer, par un motif générique, une liste de noms de fichiers pouvant correspondre à ce motifs. | ||
- | <note tip>Pour simplifier, on peut appeler les caractères génériques et expressions génériques, des globs en référence à la commande glob ou à l'option extglob de la commande shopt.\\ | + | <note tip> Pour simplifier, on peut appeler les caractères génériques et expressions génériques, des globs en référence à la commande glob ou à l'option extglob de la commande shopt.\\ |
Voir : man bash ligne 1914,sq. et man glob | Voir : man bash ligne 1914,sq. et man glob | ||
En définitive, dans la suite j'emploierai le terme "métacaractère" comme synonyme de globs simples et bracket. | En définitive, dans la suite j'emploierai le terme "métacaractère" comme synonyme de globs simples et bracket. | ||
+ | |||
</note> | </note> | ||
- | * Enfin, ces expressions génériques sont issues d'un mécanisme plus large et plus complexe appelé, //expressions rationnelles//((ou //expressions régulières//, et en anglais //regular expressions// souvent abrégé en //regex// ou //regexp//)). | + | * Enfin, ces expressions génériques (man bash), ou métacaractères (terminologie usuelle) sont issues d'un mécanisme plus large et plus complexe appelé, //expressions rationnelles//((ou //expressions régulières//, et en anglais //regular expressions// souvent abrégé en //regex// ou //regexp//)). |
* Voir : [[doc:systeme:grep|Regexp et grep]]\\ | * Voir : [[doc:systeme:grep|Regexp et grep]]\\ | ||
Ligne 442: | Ligne 429: | ||
</note> | </note> | ||
- | ==== //Méta-caractères//, ou //opérateurs de contrôle et de redirection// ==== | + | ==== Méta-caractères, ou opérateurs de contrôle et de redirection ==== |
===Définition particulière === | ===Définition particulière === | ||
Ligne 453: | Ligne 440: | ||
</code> | </code> | ||
- | Un**mot** est quant à lui //une séquence de caractères considérée comme une unité élémentaire par le shell. On parle également de token (jeton)//. | + | Un **mot** est //une séquence de caractères considérée comme une unité élémentaire par le shell. On parle également de token (jeton)//. |
- | Mais pourquoi évoquer les mêmes caractères sous des appellations différentes ? | + | * Attention dans ce sens, le terme de méta-caractère ne renvoie pas aux caractères génériques (man bash) ou au globbing et pattern mais fait référence à l'analyse et au traitement par le shell de la ligne de commande. |
- | + | * L'ordre d'analyse est le suivant : | |
- | Pourquoi trouve-t-on certains caractères dans la définition des méta-caratères ci-dessus, mais aussi dans la liste des opérateurs de contrôle ? S'agit-il de la même chose? | + | |
- | + | ||
- | Cette appellation méta-caractère que l'on trouve dans le man bash, renvoie à l'analyse et au traitement par le shell de la ligne de commande. L'ordre d'analyse est le suivant : | + | |
- découpage lexical en mots ; | - découpage lexical en mots ; | ||
- découpage en commandes (lignes de tubes, instructions de contrôle (if, while...) ) ; | - découpage en commandes (lignes de tubes, instructions de contrôle (if, while...) ) ; | ||
Ligne 470: | Ligne 454: | ||
- récupération de la sortie | - récupération de la sortie | ||
- | Chacun des caractères ci-dessus permet de découper la ligne de commande en mots à l'aide des blancs, non seulement avec "espace" et tabulation", mais aussi avec ces autres séparateurs de mots : | (il ne s'agit pas "encore" du pipe) & ; , < , > | + | <note tip> En bref !!! |
- | + | * Les caractères servant au globbing et au perttern, sont désignés dans le man bash de caractères génériques.\\ Mais à l'usage on parle de métacaractères. | |
- | Ce qu'il faut comprendre, c'est que "espace et "tabulation" permettent de déterminer la commande (premier mot), des (ou de l'option) options (reconnue(s) par - placé avant elle(s), et les arguments. | + | |
- | Les autres signes ci-dessus, désignés de méta-caractères, sont des séparateurs de mots différents de "espace" et "tabulation" parce que, en plus de séparer les mots, ils indiquent le contexte d'exécution des commandes. | + | |
- | Ce qu'il faut comprendre c'est que les méta-caractères, outre "espace" et "tabulation", font partie des caractères spéciaux de bash. Il s'agit avec cette définition d'une première évocation simplifiée indiquant que parmi tous les caractères spéciaux, ces "méta-caractères" se trouvent là présentés seuls | & ; ( ) < > pour indiquer que leurs significations dépendra de l'étape 2 ci-dessus, du contexte des commandes. Ce contexte dépend des commandes puis selon la composition de ces méta-caractères entre eux, et/ou la présence de commandes, de la mise en œuvre des commandes internes, des opérateurs d'enchaînement de commandes, des opérateurs de redirection. | + | * Les caractères qui permettent le mécanisme de lecture d'une ligne de commande par le shell sont appelés dans le man bash méta-caractères.\\ Mais à l'usage on parle de mots réservés. |
- | <note>À l'usage, on regroupe ces "méta-caractères", sous l'appellation de "mots réservés". Il y a deux sortes de mots réservés : les opérateurs de contrôle et les opérateurs de redirection. | + | * On distingue deux sortes de mots réservés : les opérateurs de contrôle et les opérateurs de redirection. |
</note> | </note> | ||