
-->
BASH(1) BASH(1)
NOM
bash - Interpréteur de commandes GNU Bourne-Again SHell.
SYNOPSIS
bash [options] [fichier]
COPYRIGHT
Bash is Copyright (C) 1989-2005 by the Free Software Foundation, Inc.
DESCRIPTION
Bash est un interpréteur de commandes (shell) compatible sh qui exécute
les commandes lues depuis l’entrée standard ou depuis un fichier. Bash
inclut aussi des fonctionnalités utiles des interpréteurs de commandes
Korn et C (ksh et csh).
Bash vise à être une implémentation conforme aux spécifications IEEE
sur les interpréteurs de commandes et les outils POSIX (groupe de tra‐
vail de l’IEEE 1003.2). Bash peut être configuré pour être conforme aux
spécifications POSIX par défaut.
OPTIONS
En plus des options d’interpréteur monocaractères documentées dans la
description de la commande interne set, bash accepte les options suiv‐
antes lors de son appel :
-c chaîne Si l’option -c est présente, les commandes sont lues depuis
la chaîne fournie. S’il y a des arguments après la chaîne,
ils sont affectés aux paramètres positionnels, en commençant
par $0.
-i Si l’option -i est présente, l’interpréteur est interactif.
-l Faire que bash se comporte comme s’il avait été appelé comme
interpréteur de commandes de connexion (voir APPEL plus bas).
-r Si l’option -r est présente, l’interpréteur devient restreint
(voir INTERPRÉTEUR RESTREINT plus bas).
-s Si l’option -s est présente ou s’il ne reste plus d’argument
après le traitement des options, alors les commandes sont
lues depuis l’entrée standard. Cette option permet d’affecter
les paramètres positionnels tout en appelant un interpréteur
interactif.
-D Une liste de toutes les chaînes entre guillemets doubles
précédées de $ est affichée sur la sortie standard. Ce sont
les chaînes qui sont sujettes à une traduction quand le
paramètre linguistique régional n’est ni C ni POSIX. Cela
implique l’option -n ; aucune commande ne sera exécutée.
[-+]O [option_shopt]
option_shopt est une des options de l’interpréteur acceptées
par la commande interne shopt (voir plus bas COMMANDES
INTERNES DE L’INTERPRÉTEUR ). Si option_shopt est présente,
-O crée cette option ; +O la détruit. Si option_shopt n’est
pas fournie, les noms et valeurs des options de
l’interpréteur acceptées par shopt sont affichés sur la sor‐
tie standard. Si l’option d’appel est +O, la sortie est
affichée dans un format réutilisable en entrée.
-- Deux caractères -- indiquent la fin des options et désac‐
tivent le traitement des arguments. Tous les arguments après
le -- sont traités comme des noms de fichiers et paramètres.
- est équivalent à --.
Bash reconnaît également plusieurs options multicaractères. Ces options
doivent, pour être reconnues, apparaître sur la ligne de commande avant
les options monocaractères.
--debugger
Prend les dispositions pour que le paramétrage du traçage soit
exécuté avant que l’interpréteur démarre. Enclenche le mode de
traçage étendu (voir plus bas la description de l’option extde‐
bug de la commande interne shopt) et le traçage des fonctions de
l’interpréteur (voir plus bas la description de l’option -o
functrace de la commande interne set).
--dump-po-strings
Équivalent à -D, mais la sortie est dans le format des fichiers
po (objets portables) de l’outil GNU gettext.
--dump-strings
Équivalent à -D.
--help Affiche un message d’aide sur la sortie standard et termine avec
succès.
--init-file fichier
--rcfile fichier
Exécuter les commandes contenues dans fichier plutôt que celles
du fichier d’initialisation commun à tout le système
/etc/bash.bashrc et que le fichier d’initialisation personnel
standard ~/.bashrc si l’interpréteur est interactif (voir APPEL
plus bas).
--login
Équivalent à -l.
--noediting
Ne pas utiliser la bibliothèque GNU readline pour lire les
lignes de commande, lorsque l’interpréteur est interactif.
--noprofile
Ne lire ni le fichier de configuration générale /etc/profile ni
les fichiers d’initialisation personnels ~/.bash_profile,
~/.bash_login, ni ~/.profile. Par défaut, bash lit ces fichiers
lorsqu’il est appelé comme interpréteur de commandes de connex‐
ion (voir APPEL plus bas).
--norc Ne pas lire ni exécuter le fichier de configuration commun à
tout le système /etc/bash.bashrc ni le fichier personnel d’ini‐
tialisation ~/.bashrc lorsque l’interpréteur est interactif.
Cette option est activée par défaut si l’interpréteur est appelé
sous le nom sh.
--posix
Aligner le comportement de bash sur le standard POSIX 1003.2, en
ce qui concerne les options dont l’action par défaut diffère de
ce standard (mode posix).
--restricted
L’interpréteur devient restreint (voir INTERPRÉTEUR RESTREINT
plus bas).
--verbose
Équivalent à -v.
--version
Affiche le numéro de version de bash sur la sortie standard et
termine avec succès.
ARGUMENTS
S’il reste des arguments sur la ligne de commande après traitement des
options et que ni l’option -c, ni l’option -s n’ont été fournies, le
premier argument est supposé être le nom du fichier dans lequel lire
les commandes d’interpréteur. Si bash est appelé de cette façon, le nom
du ficher est affecté à $0 et les arguments restants aux autres
paramètres positionnels. Bash lit et exécute les commandes depuis ce
fichier, puis termine. L’état final de bash est l’état final de la
dernière commande exécutée dans le script. Si aucune commande n’a été
exécutée, l’état final est 0. Une tentative est d’abord faite de trou‐
ver le fichier dans le répertoire courant et, si aucun fichier n’est
trouvé, l’interpréteur cherche le script dans les répertoires contenus
dans PATH.
APPEL
Un interpréteur de commandes est dit de connexion (login shell) si le
premier caractère de son argument numéro zéro est un - ou s’il est
appelé avec l’option --login.
Un interpréteur est interactif s’il est appelé sans argument autre que
des options et sans l’option -c, dont l’entrée standard et sa sortie
d’erreur sont toutes deux connectées à des terminaux (comme déterminé
par la fonction isatty(3)) ou s’il est appelé avec l’option -i. PS1
est créée et $- contient la lettre i si bash est interactif, ce qui
permet à un script ou à un fichier de démarrage de tester cet état.
Le paragraphe suivant décrit comment bash exécute ses fichiers d’ini‐
tialisation. Si un quelconque de ces fichiers existe mais n’est pas
accessible en lecture, bash signale une erreur. Les tildes sont rem‐
placés par des noms de fichiers comme décrit plus bas dans Développe‐
ment du tilde dans le paragraphe DÉVELOPPEMENTS.
Lorsque bash est lancé comme interpréteur de commandes de connexion
interactif ou comme interpréteur non interactif avec l’option --login,
il lit et exécute tout d’abord les commandes se trouvant dans le
fichier /etc/profile si ce fichier existe. Après lecture de ce fichier,
il recherche ~/.bash_profile, ~/.bash_login et ~/.profile, dans cet
ordre, puis lit et exécute les commandes se trouvant dans le premier
fichier existant et accessible en lecture. L’option --noprofile peut
être utilisée à l’appel de l’interpréteur pour empêcher ce comporte‐
ment.
Lorsqu’un interpréteur de commandes de connexion termine, bash lit et
exécute les commandes du fichier ~/.bash_logout, s’il existe.
Quand un interpréteur interactif démarre sans être un interpréteur de
commandes de connexion, bash lit et exécute les commandes se trouvant
dans /etc/bash.bashrc et ~/.bashrc s’ils existent. Ce comportement peut
être empêché à l’aide de l’option --norc. L’option --rcfile fichier
forcera bash à lire et exécuter les commandes dans fichier plutôt que
dans /etc/bash.bashrc et ~/.bashrc.
Quand bash est démarré de façon non interactive, par exemple pour
lancer un script, il consulte la variable BASH_ENV dans l’environ‐
nement, développe son contenu si elle existe et considère cette valeur
comme le nom d’un fichier à lire et exécuter. Bash se comporte comme si
la commande suivante était exécutée :
if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
mais la valeur de la variable PATH n’est pas utilisée pour rechercher
le fichier.
Si bash est appelé sous le nom sh, il essaye d’imiter le comportement
de démarrage des versions historiques de sh aussi fidèlement que possi‐
ble, tout en restant conforme aux spécifications POSIX. Lorsqu’il est
appelé comme interpréteur de commandes de connexion interactif ou non
interactif avec l’option --login, il essaye d’abord de lire et
exécuter, dans cet ordre, les commandes de /etc/profile puis de ~/.pro‐
file. L’option --noprofile peut être utilisée pour empêcher ce com‐
portement. Quand il est appelé en tant qu’interpréteur interactif sous
le nom sh, bash consulte la variable ENV, développe sa valeur si elle
est définie et utilise le résultat en tant que nom de fichier à lire et
exécuter. Comme un interpréteur appelé sous le nom sh n’essaye pas de
lire et d’exécuter des commandes d’un quelconque autre fichier de
démarrage, l’option --rcfile n’a aucun effet. Un interpréteur non
interactif appelé sous le nom sh n’essaie de lire aucun autre fichier
d’initialisation. Quand il est appelé sous le nom sh, bash entre en
mode posix après avoir lu les fichiers d’initialisation.
Quand bash est appelé en mode posix comme avec l’option --posix sur la
ligne de commande, il suit le standard POSIX pour les fichiers de
démarrage. Dans ce mode, les interpréteurs interactifs développent la
variable ENV et les commandes sont lues et exécutées à partir du
fichier dont le nom est la valeur développée. Aucun autre fichier
d’initialisation n’est lu.
Bash tente de déterminer s’il est exécuté par le démon lançant les
interpréteurs de commandes distants, généralement rshd. Si bash conclut
qu’il est exécuté par rshd, il lit et exécute les commandes de
/etc/bash.bashrc et ~/.bashrc si ces fichiers existent et sont lisi‐
bles. Il n’a pas ce comportement lorsqu’il est appelé sous le nom sh.
L’option --norc peut être utilisée pour empêcher ce comportement et
l’option --rcfile peut être utilisée pour forcer la lecture d’un autre
fichier, mais rshd n’appelle généralement pas l’interpréteur avec ces
options ni ne permet de les spécifier.
Si l’interpréteur est lancé avec un identifiant (de groupe) d’utilisa‐
teur effectif différent de l’identifiant (de groupe) d’utilisateur réel
et si l’option -p n’est pas fournie, aucun fichier d’initialisation
n’est lu, les fonctions de l’interpréteur ne sont pas importées depuis
l’environnement, la variable SHELLOPTS, si présente dans l’environ‐
nement, est ignorée et l’identifiant de l’utilisateur effectif est mis
à celui de l’utilisateur réel. Si l’option -p est fournie à l’appel, le
comportement au démarrage est le même mais l’identifiant d’utilisateur
effectif n’est pas modifié.
DÉFINITIONS
Les définitions suivantes sont utilisées dans toute la suite ce docu‐
ment.
blanc Une espace ou une tabulation.
mot Une suite de caractères considérée comme une unité élémentaire
par l’interpréteur. On parle également de lexème (token).
nom Un mot ne contenant que des caractères alphanumériques ou le
soulignement (underscore), commençant par une lettre ou un
soulignement. On s’y réfère également sous le terme identifica‐
teur.
métacaractère
Un caractère qui, non protégé, sépare les mots. Un de ceux-ci :
| & ; ( ) < > space tab
opérateur de contrôle
Un lexème ayant une fonction de contrôle. C’est l’un des sym‐
boles suivants :
|| & && ; ;; ( ) | <newline>
MOTS RÉSERVÉS
Les mots réservés sont des mots qui ont une signification spéciale pour
l’interpréteur. Les mots suivants sont reconnus comme réservés
lorsqu’ils ne sont pas protégés et sont soit le premier mot d’une com‐
mande simple (voir plus bas GRAMMAIRE DE L’INTERPRÉTEUR ) soit le
troisième mot d’une commande case ou for :
! case do done elif else esac fi for function if in select then until
while { } time [[ ]]
GRAMMAIRE DE L’INTERPRÉTEUR
Commandes simples
Une commande simple est une suite d’affectations facultatives de vari‐
ables, suivie de mots séparés par des blancs et de redirections, et
terminée par un opérateur de contrôle. Le premier mot spécifie la com‐
mande à exécuter et est passé comme argument zéro. Les mots restants
sont transmis comme arguments à la commande appelée.
La valeur renvoyée par une commande simple est son état final ou 128+n
si la commande a été terminée par le signal n.
Conduites
Une conduite (pipeline) est une suite d’une ou plusieurs commandes
séparées par le caractère tube |. Le format d’une conduite est :
[time [-p]] [ ! ] commande_1 [ | commande_2 ... ]
La sortie standard de la commande_1 est connectée par un tube à
l’entrée standard de la commande_2. Cette connexion est effectuée avant
toute redirection spécifiée par la commande elle-même (voir REDIREC‐
TIONS plus bas).
L’état renvoyé par une conduite est l’état final de la dernière com‐
mande, à moins que l’option pipefail soit activée. Si pipefail est
activée, l’état renvoyé par la conduite est la valeur de la dernière
commande (la plus à droite) à terminer avec un état différent de zéro
ou zéro si toutes les commandes se terminent avec succès. Si le mot
réservé ! précède une conduite, l’état final de cette conduite sera la
négation logique de l’état final tel que décrit plus haut.
L’interpréteur attend que toutes les commandes de la conduite soient
terminées avant de renvoyer une valeur.
Si le mot réservé time précède une conduite, les temps passés par le
programme en modes utilisateur et système sont indiqués quand la con‐
duite se termine. L’option -p modifie le format de sortie pour celui
spécifié par POSIX. La variable TIMEFORMAT peut contenir une chaîne de
format indiquant comment les informations de chronométrage doivent être
affichées ; consultez plus bas la descriptions de TIMEFORMAT dans Vari‐
ables de l’interpréteur.
Chaque commande dans une conduite est exécutée comme un processus
indépendant (c’est-à-dire dans un sous-interpréteur).
Listes
Une liste est une suite d’une ou plusieurs conduites séparées par l’un
des opérateurs ;, &, && ou ││ et facultativement terminée par l’un au
choix des ;, & ou <saut de ligne>.
Dans cette liste d’opérateurs, && et ││ ont une priorité identique,
suivis par ; et &, qui ont également une priorité identique.
Une suite d’un ou plusieurs sauts de ligne peut apparaître dans une
liste à la place d’un point-virgule pour délimiter les commandes.
Si une commande se termine par l’opérateur de contrôle &,
l’interpréteur l’exécute en arrière-plan, dans un sous-interpréteur.
L’interpréteur n’attend pas que la commande se termine et l’état ren‐
voyé est 0. Les commandes séparées par un ; sont exécutées successive‐
ment, l’interpréteur attend que chaque commande se termine tour à tour.
L’état renvoyé est l’état final de la dernière commande exécutée.
Les opérateurs de contrôle && et ││ indiquent respectivement des listes
de ET et des listes de OU. Une liste ET est de la forme
commande_1 && commande_2
commande_2 est exécutée si, et seulement si, commande_1 renvoie un état
final de zéro.
Une liste OU a la forme
commande_1 ││ commande_2
commande_2 est exécutée si et seulement si commande_1 renvoie un état
final différent de zéro. L’état renvoyé par des listes de ET et de OU
est l’état final de la dernière commande exécutée dans la liste.
Commandes composées
Une commande composée est l’une des constructions suivantes :
(liste)
liste est exécutée dans un sous-interpréteur (voir plus bas
ENVIRONNEMENT D’EXÉCUTION DES COMMANDES ). Les affectations de
variables et les commandes internes qui affectent l’environ‐
nement de l’interpréteur n’ont pas d’effet une fois que la com‐
mande se termine. L’état renvoyé est l’état final de la liste.
{ liste; }
liste est simplement exécutée avec l’environnement de
l’interpréteur en cours. liste doit se terminer par un caractère
de saut de ligne ou un point-virgule. Cette construction est
connue sous le nom de commandes groupées. L’état renvoyé est
l’état final de la liste. Remarquez que contrairement aux
métacaractères ( et ), { et } sont des mots réservés qui ne
doivent apparaître que là où un mot réservé peut être reconnu.
Puisqu’ils ne conduiront pas un découpage en mots, ils doivent
être séparés de la liste par une espace.
((expression))
L’expression est évaluée selon les règles décrites plus bas dans
ÉVALUATION ARITHMÉTIQUE. Si la valeur arithmétique de l’expres‐
sion est différente de zéro, l’état renvoyé est 0 ; sinon l’état
renvoyé est 1. Ceci est exactement équivalent à let "expres‐
sion".
[[ expression ]]
Renvoie un état de 0 ou 1 selon l’évaluation de la condition
expression. Les conditions sont composées de primitives décrites
plus bas dans CONDITIONS. Le découpage en mots et le développe‐
ment des chemins ne sont pas effectués sur les mots entre [[ et
]] ; le développement des tildes, des paramètres, des variables,
le développement arithmétique, la substitution de commande et de
processus, ainsi que la suppression des protections sont
effectués. Les opérateurs conditionnels comme -f ne doivent pas
être protégés afin d’être reconnus comme primitives.
Quand les opérateurs == et != sont utilisés, la chaîne placée à
droite de l’opérateur est considérée comme étant un motif dont
la correspondance est recherchée selon les règles décrites plus
bas dans Motifs génériques. Si l’option d’interpréteur nocase‐
match est activée, la mise en correspondance est effectuée sans
tenir compte de la casse (différence majuscule/minuscule) des
caractères alphabétiques. La valeur renvoyée est 0 si les
chaînes correspondent (==) (ou respectivement ne correspondent
pas (!=) au motif et 1 sinon. Toute partie du motif peut être
protégée pour la forcer à correspondre en tant que chaîne.
Un opérateur binaire supplémentaire, =~, est disponible, avec la
même priorité que == et !=. Lorsqu’il est utilisé, la chaîne à
droite de l’opérateur est considérée comme une expression
rationnelle étendue et est mise en correspondance en conséquence
(comme avec regex(3)). La valeur renvoyée est 0 si la chaîne
correspond au motif et 1 si elle ne correspond pas. Si l’expres‐
sion rationnelle n’est pas syntaxiquement correcte, la valeur
renvoyée de l’expression conditionnelle est 2. Si l’option
d’interpréteur nocasematch est activée, la mise en correspon‐
dance est effectuée sans tenir compte de la casse. Les
sous-chaînes mises en correspondance avec des sous-expressions
entre parenthèses dans l’expression rationnelle sont sauveg‐
ardées dans la variable tableau BASH_REMATCH. L’élément d’indice
0 de BASH_REMATCH est la partie de la chaîne correspondant à
l’expression rationnelle complète. L’élément d’indice n de
BASH_REMATCH est la partie de la chaîne correspondant à la nème
sous-expression entre parenthèses.
Les expressions peuvent être combinées en utilisant les
opérateurs suivants, décrits par ordre de priorité décrois‐
sante :
( expression )
Renvoie la valeur de l’expression. Cela peut être utilisé
pour surpasser la priorité normale des opérateurs.
! expression
Vrai si expression est fausse.
expression1 && expression2
Vrai si expression1 et expression2 sont toutes les deux
vraies.
expression1 || expression2
Vrai si expression1 ou expression2 est vraie.
Les opérateurs && et || n’évaluent pas expression2 si la valeur
de expression1 suffit à déterminer la valeur renvoyée par la
condition tout entière.
for nom [ in mot ] ; do liste ; done
La liste de mots suivant in est développée, produisant une liste
d’éléments. La variable nom prend tour à tour la valeur de cha‐
cun des éléments et liste est exécutée à chaque fois. Si in mot
est omis, la commande for exécute la liste une fois pour chacun
des paramètres positionnels existants (voir PARAMÈTRES plus
bas). L’état renvoyé est l’état final de la dernière commande
exécutée. Si le développement des éléments suivant in conduit à
une liste vide, aucune commande n’est exécutée et l’état renvoyé
est 0.
for (( expr1 ; expr2 ; expr3 )) ; do liste ; done
L’expression arithmétique expr1 est d’abord évaluée selon les
règles décrites plus bas sous ÉVALUATION ARITHMÉTIQUE.
L’expression arithmétique expr2 est ensuite évaluée répétitive‐
ment jusqu’à valoir zéro. Chaque fois que expr2 est évaluée en
une valeur différente de zéro, liste est exécutée et l’expres‐
sion arithmétique expr3 est évaluée. Si une quelconque des
expressions est omise, elle est considérée comme s’évaluant à 1.
La valeur renvoyée est l’état final de la dernière commande dans
liste qui est exécutée ou faux si une quelconque des expressions
est incorrecte.
select nom [ in mot ] ; do liste ; done
La liste de mots à la suite de in est développée, produisant une
liste d’éléments. L’ensemble des mots développés est imprimé sur
la sortie d’erreur standard, chacun précédé par un nombre. Si in
mot est omis, les paramètres positionnels sont imprimés (voir
PARAMÈTRES plus bas). L’invite PS3 est affichée et une ligne est
lue depuis l’entrée standard. Si la ligne est constituée d’un
nombre correspondant à l’un des mots affichés, alors ce mot est
affecté à la valeur de la variable nom. Si la ligne est vide,
les mots et l’invite sont affichés à nouveau. Si une fin de
fichier (EOF) est lue, la commande se termine. Toute autre
valeur lue conduit à mettre à vide la variable nom. La ligne lue
est conservée dans la variable REPLY. La liste est exécutée
après chaque sélection, jusqu’à ce qu’une commande break soit
atteinte. L’état final de select est l’état final de la dernière
commande exécutée dans la liste ou zéro si aucune commande n’a
été exécutée.
case mot in [ [(] motif [ | motif ] ... ) liste ;; ] ... esac
Une commande case commence d’abord par développer le mot, puis
essaye de le mettre en correspondance tour à tour avec chacun
des motifs en utilisant les mêmes règles que pour le développe‐
ment des chemins (voir plus bas Développement des chemins). Le
mot est développé en utilisant le développement du tilde, le
développement des paramètres et des variables, la substitution
arithmétique, la substitution de commande, la substitution de
processus et la suppression des protections. Chaque motif
examiné est développé en utilisant le développement du tilde, le
développement des paramètres et des variables, la substitution
arithmétique, la substitution de commande et la substitution de
processus. Si l’option d’interpréteur nocasematch est activée,
la mise en correspondance est effectuée sans tenir compte de la
casse des caractères alphabétiques. Quand une correspondance est
trouvée, la liste associée est exécutée. Dès qu’un motif correct
a été trouvé, il n’y a plus d’autre essai. L’état final est zéro
si aucun motif ne correspond. Sinon il est l’état final de la
dernière commande exécutée dans la liste.
if liste; then liste; [ elif liste; then liste; ] ... [ else liste; ]
fi
La liste du if est exécutée. Si son état final est zéro, la
liste du then est exécutée. Sinon, chacune des listes des elif
est exécutée tour à tour et si son état final est zéro, la liste
du then associé est exécutée et la commande termine. Sinon, la
liste du else, si présente, est exécutée. L’état final est
l’état final de la dernière commande exécutée ou zéro si aucune
condition n’a été satisfaite.
while liste; do liste; done
until liste; do liste; done
La commande while répète la liste du do tant que la dernière
commande de la liste du while renvoie un état final de zéro. La
commande until est identique à la commande while, sauf que le
test est inversé ; la liste du do est exécutée tant que la
dernière commande de la liste renvoie un état final différent de
zéro. L’état final des commandes while et until est l’état final
de la dernière commande exécutée dans la liste du do ou zéro si
aucune commande n’a été exécutée.
Définitions des fonctions de l’interpréteur
Une fonction de l’interpréteur est un objet qui est appelé comme une
commande simple et qui exécute une commande composée avec un nouveau
jeu de paramètres positionnels. Les fonctions de l’interpréteur sont
déclarées de la façon suivante :
[ function ] nom () commande-composée [redirection]
Ceci définit une fonction possédant le nom mentionné. Le mot
réservé function est facultatif. S’il est fourni, les par‐
enthèses sont facultatives. Le corps de la fonction est la com‐
mande composée commande-composée (voir Commandes composées plus
haut). Cette commande est généralement une liste de commandes
entre { et }, mais peut être une quelconque des commandes
décrites dans Commandes composées plus haut. La commande-com‐
posée est exécutée chaque fois que nom est spécifié comme le nom
d’une commande normale. Toutes redirections (voir REDIRECTIONS
plus bas) spécifiées lorsqu’une fonction est définie sont
effectuées lorsque la fonction est exécutée. L’état final d’une
définition de fonction est zéro, à moins qu’une erreur de syn‐
taxe se produise ou qu’une fonction en lecture seule existe déjà
avec le même nom. Lorsque la fonction est exécutée, l’état final
est celui de la dernière commande exécutée dans le corps de la
fonction. (Voir FONCTIONS plus bas.)
COMMENTAIRES
Dans un interpréteur non interactif ou dans un interpréteur interactif
avec l’option interactive_comments activée par la commande interne
shopt (voir plus bas COMMANDES INTERNES DE L’INTERPRÉTEUR ), un mot
commençant par # conduira à ignorer ce mot et tous les caractères
restants sur la ligne. Un interpréteur interactif sans l’option inter‐
active_comments n’autorise pas les commentaires. L’option interac‐
tive_comments est activée par défaut dans les interpréteurs interact‐
ifs.
PROTECTION
Les protections (quoting) permettent de forcer l’interpréteur à ignorer
la signification spéciale de certains caractères ou mots. Les protec‐
tions peuvent être utilisées pour désactiver le traitement des car‐
actères spéciaux, éviter la reconnaissance des mots réservés ou
empêcher le développement des paramètres.
Tous les métacaractères décrits plus haut dans DÉFINITIONS ont des sig‐
nifications spéciales pour l’interpréteur et doivent être protégés pour
ne représenter que leur propre caractère.
Lorsque les outils de développement de l’historique des commandes sont
utilisés (voir plus bas DÉVELOPPEMENT DE L’HISTORIQUE ), le caractère
de développement de l’historique, généralement !, doit être protégé
pour éviter le développement de l’historique.
Il y a trois mécanismes de protection : le caractère d’échappement, les
guillemets simples (« single quote ») et les guillemets doubles (« dou‐
ble quote »).
Un caractère contre-oblique (\) non protégé, est le caractère
d’échappement. Il préserve la valeur littérale du caractère qui le
suit, à l’exception du <saut de ligne>. Si un couple \<saut de ligne>
apparaît et si la contre-oblique n’est pas elle-même protégée, l’ensem‐
ble \<saut de ligne> est considéré comme une continuation de ligne
(c’est-à-dire qu’il est supprimé du flot d’entrée et ignoré en pra‐
tique).
Encadrer des caractères entre des guillemets simples préserve la valeur
littérale de chacun des caractères entre guillemets simples. Un guille‐
ment simple ne peut pas être placé entre deux guillemets simples, même
s’il est précédé d’une contre-oblique.
Encadrer des caractères entre des guillemets doubles préserve la valeur
littérale de chacun des caractères sauf $, ‘, \ et, lorsque le
développement de l’historique est activé, !. Les caractères $ et ‘ con‐
servent leurs significations spéciales entre guillemets doubles. La
contre-oblique ne conserve sa signification spéciale que lorsqu’elle
est suivie par l’un des caractères suivants : $, ‘, ", \ ou <saut de
ligne>. Un guillemet double peut être protégé entre deux guillemets
doubles en le faisant précéder d’une contre-oblique. S’il est activé,
le développement de l’historique sera effectué, à moins qu’un ! appa‐
raissant entre guillemets doubles ne soit protégé par une con‐
tre-oblique. La contre-oblique précédant le ! n’est pas supprimée.
Les caractères spéciaux * et @ ont des significations spéciales
lorsqu’ils se trouvent entre des guillemets doubles (voir PARAMÈTRES
plus bas).
Les mots de la forme $’chaîne’ sont traités spécialement. Le mot est
développé en chaîne avec les caractères protégés par contre-oblique
remplacés comme spécifié par le standard ANSI C. Les suites d’échappe‐
ment par contre-oblique, si présentes, sont décodées comme suit :
\a alerte (alarme)
\b effacement arrière (backspace)
\e caractère d’échappement
\f saut de page (form feed)
\n saut de ligne (new line)
\r retour chariot (carriage return)
\t tabulation horizontale
\v tabulation verticale
\\ contre-oblique
\’ guillemet simple
\nnn le caractère 8 bits dont la valeur octale est nnn (de un
à trois chiffres)
\xHH le caractère 8 bits dont la valeur hexadécimale est HH
(un à deux symboles hexadécimaux)
\cx un caractère contrôle-x
Le résultat développé est protégé par des guillemets simples comme si
le symbole dollar n’avait pas été présent.
Une chaîne entre guillemets doubles précédée d’un symbole dollar ($)
conduira à la traduction de la chaîne selon le paramètre linguistique
régional en vigueur. Si le paramètre linguistique régional courant est
C ou POSIX, le symbole dollar est ignoré. Si la chaîne est traduite et
remplacée, le résultat est protégé par des guillemets doubles.
PARAMÈTRES
Un paramètre est une entité permettant de stocker des valeurs. Il peut
être un nom, un nombre ou un des caractères spéciaux décrits plus bas,
dans Paramètres spéciaux. Une variable est un paramètre noté par un
nom. Une variable possède une valeur et zéro ou plusieurs attributs.
Les attributs sont affectés en utilisant la commande interne declare
(voir declare plus bas dans COMMANDES INTERNES DE L’INTERPRÉTEUR ).
Un paramètre est créé si une valeur lui a été affectée. La chaîne vide
est une valeur correcte. Une fois qu’une variable est créée, elle ne
peut être détruite qu’en utilisant la commande interne unset (voir plus
bas COMMANDES INTERNES DE L’INTERPRÉTEUR ).
Une variable peut recevoir une valeur par une affectation de la forme
nom=[valeur]
Si aucune valeur n’est indiquée, une chaîne vide est affectée à la
variable. Toutes les valeurs sont sujettes au développement du tilde,
des paramètres et des variables, à la substitution de commande, au
développement arithmétique et à la suppression des protections (voir
DÉVELOPPEMENTS plus bas). Si une variable a son attribut integer de
mis, alors la valeur est soumise à l’évaluation arithmétique, même si
la syntaxe $((...)) n’est pas utilisée (voir Développement arithmétique
plus bas). Le découpage en mots n’est pas effectué, à l’exception de
"$@" comme expliqué plus bas dans Paramètres spéciaux. Le développement
des chemins n’est pas effectué. Les affectations peuvent également
apparaître comme argument des commandes internes suivantes : alias,
declare, typeset, export, readonly et local.
Dans le contexte où une affectation affecte une valeur à une variable
de l’interpréteur ou à un indice de tableau, l’opérateur += peut être
utilisé pour ajouter ou additionner à la précédente valeur de la vari‐
able. Lorsque l’opérateur += est appliqué à une variable dont
l’attribut integer (entier) a été mis, la valeur est évaluée comme une
expression arithmétique et additionnée à la valeur actuelle de la vari‐
able qui est également évaluée. Lorsque += est appliqué à une variable
tableau en utilisant l’affectation composée (voir Tableaux plus bas),
la valeur de la variable n’est pas détruite (comme elle l’est lorsqu’on
utilise =) et les nouvelles valeurs sont ajoutées au tableau, en com‐
mençant à l’indice maximum du tableau plus un. Lorsque l’opérateur est
appliqué à une variable de type chaîne, la valeur est développée et
concaténée à la valeur de la variable.
Paramètres positionnels
Un paramètre positionnel est un paramètre noté par un ou plusieurs
chiffres (à l’exception du chiffre 0 seul). Les paramètres positionnels
sont affectés avec les arguments de l’interpréteur lors de son appel.
Ils peuvent être réaffectés avec la commande interne set. On ne peut
pas utiliser les affectations pour les paramètres positionnels. Ils
sont temporairement remplacés lors de l’exécution d’une fonction de
l’interpréteur (voir FONCTIONS plus bas).
Un paramètre positionnel constitué de plusieurs chiffres doit être
encadré par des accolades lors de son développement (voir DÉVELOPPE‐
MENTS plus bas).
Paramètres spéciaux
L’interpréteur traite plusieurs paramètres spécifiquement. Ces
paramètres peuvent uniquement être consultés, il n’est pas permis de
leur affecter une valeur.
* Se développe en l’ensemble des paramètres positionnels, com‐
mençant par le premier. Quand le développement se produit entre
des guillemets doubles, * se transforme en un seul mot constitué
de la valeur de tous les paramètres positionnels séparés par le
premier caractère de la variable spéciale IFS. C’est-à-dire que
"$*" est équivalent à "$1c$2c...", où c est le premier caractère
de la valeur de la variable IFS. Si IFS est inexistante, les
paramètres sont séparés par des espaces. Si IFS est vide, les
paramètres sont accolés sans séparateurs.
@ Se développe en l’ensemble des paramètres positionnels, com‐
mençant par le premier. Quand le développement a lieu entre
guillemets doubles, chaque paramètre se développe en un mot dis‐
tinct. C’est-à-dire que "$@" est équivalent à "$1" "$2" .... Si
le développement des guillemets doubles survient dans un mot, le
développement du premier paramètre est accolé à la première par‐
tie du mot d’origine et le développement du dernier paramètre
est accolé à la dernière partie du mot d’origine. Quand il n’y a
pas de paramètres positionnels, "$@" et $@ ne se développent en
rien (c’est-à-dire qu’ils sont simplement éliminés).
# Correspond au nombre de paramètres positionnels, en base
décimale.
? Se développe en l’état de la dernière conduite exécutée au pre‐
mier plan.
- Est remplacé par la liste des options de l’interpréteur
indiquées durant l’appel, configurées avec la commande interne
set ou celles créées par l’interpréteur lui-même (comme avec
l’option -i).
$ Se transforme en PID de l’interpréteur. Dans un
sous-interpréteur (), il se transforme en PID de l’interpréteur
et non pas du sous-interpréteur.
! Se transforme en PID de la commande (asynchrone) exécutée en
arrière-plan le plus récemment.
0 Se développe en le nom de l’interpréteur ou du script. Ce
paramètre est créé lors de l’initialisation de l’interpréteur.
Si bash est appelé avec un fichier de commandes, $0 correspond
au nom de ce fichier. Si bash est lancé avec l’option -c, alors
$0 contient le premier argument, s’il y en a un, après la chaîne
de commandes à exécuter. Sinon, ce paramètre contient le nom de
fichier utilisé pour appeler bash, comme indiqué par l’argument
zéro.
_ Au lancement de l’interpréteur, contient le chemin d’accès
absolu utilisé pour appeler l’interpréteur ou le script en cours
d’exécution tel qu’il est passé dans l’environnement ou dans la
liste des arguments. Devient le dernier argument de la commande
précédente, après développement. Mis aussi au chemin d’accès
complet de chaque commande exécutée et se retrouve dans l’envi‐
ronnement exporté à cette commande. Lors de la vérification de
l’arrivée de courriel, contient le nom du fichier de courriel en
cours de consultation.
Variables de l’interpréteur
Les variables suivantes sont créées par l’interpréteur :
BASH Se développe en chemin d’accès complet à l’instance courante de
bash.
BASH_ARGC
Une variable de type tableau dont les valeurs sont le nombre de
paramètres de chaque trame de la pile d’appel d’exécution de
l’interpréteur courant. Le nombre de paramètres du sous-pro‐
gramme courant (fonction de l’interpréteur ou script exécuté par
. ou source) est au sommet de la pile. Lorsqu’un sous-programme
est exécuté, le nombre de paramètres passés est placé dans
BASH_ARGC. L’interpréteur crée BASH_ARGC seulement dans le mode
de traçage étendu (voir plus bas la description de l’option
extdebug de la commande interne shopt).
BASH_ARGV
Une variable de type tableau contenant tous les paramètres de la
pile d’appel d’exécution de l’interpréteur courant. Le dernier
paramètre du dernier sous-programme est au sommet de la pile ;
le premier paramètre de l’appel initial est en bas. Lorsqu’un
sous-programme est exécuté, les paramètres fournis sont placés
dans BASH_ARGV. L’interpréteur crée BASH_ARGV seulement dans le
mode de traçage étendu (voir plus bas la description de l’option
extdebug de la commande interne shopt).
BASH_COMMAND
La commande en cours d’exécution ou sur le point d’être
exécutée, à moins que l’interpréteur n’exécute une commande à la
suite d’une capture, auquel cas c’est la commande s’exécutant au
moment de la capture.
BASH_EXECUTION_STRING
L’argument commande de l’option d’appel -c.
BASH_LINENO
Une variable de type tableau dont les éléments sont les numéros
de ligne des fichiers sources correspondant à chacun des
éléments de FUNCNAME. ${BASH_LINENO[$i]} est le numéro de la
ligne dans le fichier source où ${FUNCNAME[$ifP]} a été appelé.
Le nom du fichier source correspondant est ${BASH_SOURCE[$i]}.
Utilisez LINENO pour obtenir le numéro de ligne courant.
BASH_REMATCH
Une variable de type tableau dont les éléments sont affectés
avec l’opérateur binaire =~ dans la commande conditionnelle [[.
L’élément d’indice 0 est la partie de la chaîne correspondant à
l’expression rationnelle complète. L’élément d’indice n est la
partie de la chaîne correspondant à la n-ième sous-expression
entre parenthèses. Cette variable est en lecture seule.
BASH_SOURCE
Une variable de type tableau dont les éléments sont les noms des
fichiers source correspondants aux éléments de la variable
tableau FUNCNAME.
BASH_SUBSHELL
Incrémenté chaque fois qu’un sous-interpréteur ou qu’un environ‐
nement de sous-interpréteur est engendré. La valeur initiale est
0.
BASH_VERSINFO
Une variable de type tableau protégée en écriture dont les
éléments représentent la version de cette instance de bash.
Cette valeur est affectée aux éléments du tableau comme suit :
BASH_VERSINFO[0] Le numéro majeur de la version
(release).
BASH_VERSINFO[1] Le numéro mineur de la version (ver‐
sion).
BASH_VERSINFO[2] Le niveau de correctif.
BASH_VERSINFO[3] Le numéro de compilation.
BASH_VERSINFO[4] Le statut de cette version (p. ex.,
beta1).
BASH_VERSINFO[5] La valeur de MACHTYPE.
BASH_VERSION
Se développe en une chaîne décrivant le numéro de version de
cette instance de bash.
COMP_CWORD
Un indice dans ${COMP_WORDS} du mot contenant la position
courant du curseur. Cette variable n’est disponible que dans les
fonctions de l’interpréteur appelées par les outils de
complètement programmables (voir Complètement programmable plus
bas).
COMP_LINE
La ligne de commande courante. Cette variable n’est disponible
que dans les fonctions de l’interpréteur appelées par les outils
de complètement programmables (voir Complètement programmable
plus bas).
COMP_POINT
L’indice de la position courante du curseur relatif au début de
la commande courante. Si la position courante du curseur est à
la fin de la commande courante, la valeur de cette variable est
égale à ${#COMP_LINE}. Cette variable n’est disponible que dans
les fonctions de l’interpréteur et les commandes externes
appelées par les outils de complètement programmables (voir
Complètement programmable plus bas).
COMP_WORDBREAKS
Le jeu de caractères que la bibliothèque readline considère
comme séparateurs de mots lors du complètement de mots. Si
COMP_WORDBREAKS est détruite, elle perd ses propriétés
spéciales, même si elle est recréée par la suite.
COMP_WORDS
Une variable de type tableau (voir Tableaux plus bas) consistant
en des mots individuels de la ligne de commande courante. Cette
variable n’est disponible que dans les fonctions de
l’interpréteur appelées par les outils de complètement
programmables (voir Complètement programmable plus bas).
DIRSTACK
Une variable de type tableau (voir Tableaux plus bas) représen‐
tant le contenu courant de la pile de répertoires. Les réper‐
toires apparaissent dans la pile dans l’ordre dans lequel la
commande interne dirs les affiche. Les affectations des éléments
de cette variable tableau peuvent être utilisés pour modifier
les répertoires déjà dans la pile, mais les commandes internes
pushd et popd doivent être utilisées pour ajouter et enlever des
répertoires. L’affectation de cette variable ne modifiera pas le
répertoire courant. Si DIRSTACK est détruite, elle perd ses pro‐
priétés spéciales, même si elle est recréée par la suite.
EUID Contient l’UID effectif de l’utilisateur, initialisé au démar‐
rage de l’interpréteur. Cette variable est en lecture seule.
FUNCNAME
Une variable de type tableau contenant le nom de toutes les
fonctions de l’interpréteur actuellement dans la pile d’appel
d’exécution. L’élément d’indice 0 est le nom d’une quelconque
des fonctions de l’interpréteur en cours d’exécution. L’élément
le plus bas est « main ». Cette variable n’existe que si une
fonction de l’interpréteur est en cours d’exécution. Les affec‐
tations de FUNCNAME n’ont aucun effet et renvoient un état
d’erreur. Si FUNCNAME est détruite, elle perd ses propriétés
spéciales, même si elle est recréée par la suite.
GROUPS Une variable de type tableau contenant la liste des groupes dont
l’utilisateur est membre. Les affectations de GROUPS n’ont aucun
effet et renvoient un état d’erreur. Si GROUPS est détruite,
elle perd ses propriétés spéciales, même si elle est recréée par
la suite.
HISTCMD
Le numéro d’historique ou l’indice dans la file d’historique, de
la commande en cours. Si HISTCMD est détruite, elle perd ses
propriétés spéciales, même si elle est recréée par la suite.
HOSTNAME
Automatiquement mis au nom de la machine courante.
HOSTTYPE
Automatiquement mis à une chaîne qui décrit de façon unique le
type de machine sur laquelle bash s’exécute. La valeur par
défaut dépend du système.
LINENO Chaque fois que ce paramètre est consulté, l’interpréteur le
remplace par un nombre décimal représentant le numéro de la
ligne actuelle (commençant à 1), au sein du script ou de la
fonction. Hors d’un script ou d’une fonction, la valeur n’a pas
nécessairement de sens. Si LINENO est détruite, elle perd ses
propriétés spéciales, même si elle est recréée par la suite.
MACHTYPE
Automatiquement mis à une chaîne décrivant le type du système
sur lequel bash s’exécute, dans le format standard de GNU pro‐
cesseur-compagnie-système. La valeur par défaut dépend du
système.
OLDPWD Le répertoire de travail précédent comme mis par la commande cd.
OPTARG La valeur du dernier argument d’option traité par la commande
interne getopts (voir plus bas COMMANDES INTERNES DE
L’INTERPRÉTEUR ).
OPTIND L’indice du prochain argument à traiter par la commande interne
getopts (voir plus bas COMMANDES INTERNES DE L’INTERPRÉTEUR ).
OSTYPE Automatiquement mis à une chaîne qui décrit le système
d’exploitation sur lequel bash s’exécute. La valeur par défaut
dépend du système.
PIPESTATUS
Une variable de type tableau (voir Tableaux plus bas) contenant
une liste des états finaux des processus exécutés dans la
conduite exécutée la plus récemment au premier plan (qui peut
éventuellement contenir une seule commande).
PPID L’identifiant du processus parent de l’interpréteur. Cette vari‐
able est en lecture seule.
PWD Le répertoire de travail courant comme mis par la commande cd.
RANDOM À chaque fois que ce paramètre est consulté, un entier aléatoire
entre 0 et 32767 est engendré. Cette suite de nombres aléatoires
peut être initialisée en affectant une valeur à RANDOM. Si RAN‐
DOM est détruite, elle perd ses propriétés spéciales, même si
elle est recréée par la suite.
REPLY Mis à la ligne de saisie lue par la commande interne read
lorsqu’aucun argument n’a été fourni.
SECONDS
À chaque fois que ce paramètre est consulté, le nombre de secon‐
des écoulées depuis le lancement de l’interpréteur est renvoyé.
Si une valeur est affectée à SECONDS, les valeurs renvoyées lors
des consultations ultérieures sont le nombre de secondes
écoulées depuis l’affectation, ajoutées à la valeur affectée. Si
SECONDS est détruite, elle perd ses propriétés spéciales, même
si elle est recréée par la suite.
SHELLOPTS
Liste des options activées de l’interpréteur, séparées par des
virgules. Chaque mot de la liste est un argument correct pour
l’option -o de la commande interne set (voir plus bas COMMANDES
INTERNES DE L’INTERPRÉTEUR ). Les options apparaissant dans
SHELLOPTS sont celle indiquées comme actives par set -o. Si
cette variable est dans l’environnement au lancement de bash,
chaque option de la liste est activée avant de lire un quel‐
conque fichier d’initialisation. Cette variable est en lecture
seule.
SHLVL Incrémenté de 1 à chaque appel d’une instance de bash.
UID Contient l’UID de l’utilisateur courant, initialisé au démarrage
de l’interpréteur. Cette variable est en lecture seule.
Les variables suivantes sont utilisées par l’interpréteur. Dans cer‐
tains cas, bash affecte des valeurs par défaut aux variables ; ces cas
sont décrits plus bas.
BASH_ENV
Si ce paramètre existe lorsque bash exécute un script, sa valeur
est considérée comme un nom de fichier contenant les commandes
d’initialisation de l’interpréteur, comme dans ~/.bashrc. La
valeur de BASH_ENV est soumise au développement des paramètres,
à la substitution de commande et au développement arithmétique
avant d’être considérée comme un nom de fichier. PATH n’est pas
utilisée pour rechercher le fichier obtenu.
CDPATH Le chemin de recherche de la commande interne cd. Il s’agit
d’une liste de répertoires, séparés par des deux-points « : »,
que l’interpréteur consulte lorsqu’il cherche un sous-répertoire
destination de la commande cd. Un exemple de valeur est
".:~:/usr".
COLUMNS
Utilisée par la commande interne select pour déterminer la
taille du terminal lors de l’affichage des listes de sélection.
Automatiquement mis à la réception d’un signal SIGWINCH.
COMPREPLY
Une variable de type tableau dans lequel bash lit les
complèteme