Rechercher une page de manuel

Chercher une autre page de manuel:

bash-static

Autres langues

Langue: fr

Autres versions - même langue

Version: 28 décembre 2005 (ubuntu - 01/11/07)

Section: 1 (Commandes utilisateur)

Sommaire

NOM

bash - Interpréteur de commandes GNU Bourne-Again SHell.

SYNOPSIS

bash [options] [fichier] 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 travail 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 suivantes 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 sortie 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ésactivent 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 extdebug 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 connexion (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'initialisation ~/.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 trouver 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'initialisation. Si un quelconque de ces fichiers existe mais n'est pas accessible en lecture, bash signale une erreur. Les tildes sont remplacés par des noms de fichiers comme décrit plus bas dans Développement 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 comportement.

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'environnement, 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 possible, 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 ~/.profile. L'option --noprofile peut être utilisée pour empêcher ce comportement. 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 lisibles. 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'utilisateur 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'environnement, 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 document.

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 identificateur.
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 symboles 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 commande 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 variables, 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 commande à 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 REDIRECTIONS plus bas).

L'état renvoyé par une conduite est l'état final de la dernière commande, à 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 conduite 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 Variables 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 renvoyé est 0. Les commandes séparées par un ; sont exécutées successivement, 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'environnement de l'interpréteur n'ont pas d'effet une fois que la commande 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'expression est différente de zéro, l'état renvoyé est 0 ; sinon l'état renvoyé est 1. Ceci est exactement équivalent à let "expression".
[[ 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éveloppement 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 nocasematch 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'expression 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 correspondance 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 sauvegardé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écroissante :

( 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 chacun 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étitivement 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'expression 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éveloppement 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 parenthèses sont facultatives. Le corps de la fonction est la commande 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-composé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 syntaxe 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 interactive_comments n'autorise pas les commentaires. L'option interactive_comments est activée par défaut dans les interpréteurs interactifs.

PROTECTION

Les protections (quoting) permettent de forcer l'interpréteur à ignorer la signification spéciale de certains caractères ou mots. Les protections peuvent être utilisées pour désactiver le traitement des caractè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 significations 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 (« double 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'ensemble \<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 pratique).

Encadrer des caractères entre des guillemets simples préserve la valeur littérale de chacun des caractères entre guillemets simples. Un guillement 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 ` conservent 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 ! apparaissant entre guillemets doubles ne soit protégé par une contre-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'échappement 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 variable. 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 variable 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 commenç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ÉVELOPPEMENTS 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, commenç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, commençant par le premier. Quand le développement a lieu entre guillemets doubles, chaque paramètre se développe en un mot distinct. 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 partie 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 premier 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'environnement 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-programme 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 environnement 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 (version).
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ésentant le contenu courant de la pile de répertoires. Les répertoires 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 proprié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émarrage 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 affectations 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 processeur-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 variable 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 RANDOM 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 secondes é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 quelconque 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 certains 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ètements possibles produits par une fonction de l'interpréteur appelée par les outils de complètement programmables (voir Complètement programmable plus bas).
EMACS
Si bash trouve cette variable dans l'environnement lorsque l'interpréteur démarre avec la valeur "t", il considère que l'interpréteur est lancé dans un tampon d'interpréteur emacs et désactive l'édition en ligne.
FCEDIT
L'éditeur par défaut utilisé par la commande interne fc.
FIGNORE
Une liste de suffixes, séparés par des deux-points « : », que bash ignorera lors du complètement des noms de fichiers (voir READLINE plus bas). Un nom de fichier dont le suffixe correspond à l'un de ceux mentionnés dans FIGNORE est exclu de la liste des noms de fichiers correspondant pour le complètement. Par exemple, cette variable peut prendre la valeur ".o:~" (Des protections sont nécessaires pour l'affectation d'une valeur à cette variable, qui contient des tildes).
GLOBIGNORE
Une liste de motifs séparés par des deux-points, définissant l'ensemble des noms de fichiers à ignorer lors du développement des chemins. Si un nom de fichier correspondant à un motif de développement des chemins, correspond également à un motif dans GLOBIGNORE, il est supprimé de la liste des correspondances.
HISTCONTROL
Une liste de valeurs, séparées par des deux-points, commandant la façon dont les commandes sont sauvegardées dans la file d'historique. Si la liste des valeurs contient la valeur ignorespace, les lignes commençant par une espace ne sont pas sauvegardées dans la file d'historique. La valeur ignoredups conduit à ne pas sauvegarder une ligne correspondant exactement à la ligne de commande précédente. La présence de ignoreboth est un condensé pour ignorespace et ignoredups. La valeur erasedups conduit à retirer de la file d'historique toutes les lignes précédant la ligne courante et lui correspondant avant que cette ligne y soit sauvegardée. Toute valeur qui ne fait pas partie de la liste ci-dessus est ignorée. Si HISTCONTROL est inexistante ou si elle ne contient pas une valeur correcte, toutes les lignes lues par l'analyseur de l'interpréteur seront sauvegardées dans la file d'historique, selon la valeur de HISTIGNORE. La seconde ligne et les suivantes d'une commande multiligne ne sont pas testées et sont ajoutées dans l'historique indépendamment de la valeur de HISTCONTROL.
HISTFILE
Le nom du fichier dans lequel l'historique des commandes est sauvegardé (voir HISTORIQUE plus bas). Par défaut, il s'agit de ~/.bash_history. Si inexistante, l'historique des commandes n'est pas sauvegardé lorsqu'un interpréteur interactif termine.
HISTFILESIZE
Le nombre maximum de lignes contenues dans le fichier d'historique. Quand cette variable contient une valeur, le fichier historique est tronqué, si besoin, pour ne contenir que ce nombre de lignes. La valeur par défaut est 500. Ce fichier est aussi tronqué à cette taille après son écriture quand un interpréteur interactif termine.
HISTIGNORE
Une liste de motifs, séparés par des deux-points, déterminant quelles lignes de commande devraient être sauvegardées dans la file d'historique. Chaque motif est accroché au début de la ligne et doit lui correspondre en complètement (aucun ajout de « * » implicite). Chaque motif est comparé à chaque ligne après que les vérifications de HISTCONTROL ont été appliquées. En plus des motifs génériques usuels de l'interpréteur, « & » correspond à la ligne précédente de l'historique. « & » peut être protégé par une contre-oblique ; elle est supprimée avant de tenter une comparaison. La seconde ligne et les suivantes d'une commande multiligne ne sont pas testées et sont ajoutées dans l'historique quelque soit la valeur de HISTIGNORE.
HISTSIZE
Le nombre de commandes à mémoriser dans l'historique (voir HISTORIQUE plus bas). La valeur par défaut est 500.
HISTTIMEFORMAT
Si cette variable existe et n'est pas vide, sa valeur est utilisée comme une chaîne de caractères par strftime(3) afin d'imprimer l'horodatage associé à chaque élément de l'historique affichée par la commande interne history. Si cette variable existe, les horodatages sont écrits dans le fichier historique afin d'être conservés au fur et à mesure des sessions de l'interpréteur.
HOME
Le répertoire d'accueil de l'utilisateur courant ; l'argument par défaut de la commande interne cd. La valeur de cette variable est aussi utilisée lors du développement du tilde.
HOSTFILE
Contient le nom d'un fichier ayant le même format que /etc/hosts qui devra être lu lorsque l'interpréteur aura besoin de compléter un nom de machine. La liste des complètements possibles de noms de machines peut être changée pendant l'exécution de l'interpréteur ; à la tentative de complètement de nom de machine suivant le changement de valeur, bash ajoute le contenu du nouveau fichier à la liste existante. Si HOSTFILE existe mais est vide, bash essaie de lire /etc/hosts pour obtenir la liste des complètements de noms de machines possibles. Lorsque HOSTFILE est détruite, la liste des noms de machines est effacée.
IFS
Le séparateur de champs interne (« Internal Field Separator ») qui est utilisé pour le découpage en mots après les développements et pour découper les lignes en mots avec la commande interne read. La valeur par défaut est « <espace><tabulation><saut de ligne> ».
IGNOREEOF
Commande le comportement d'un interpréteur interactif à réception d'un caractère EOF (fin de fichier) comme unique saisie. Si existante la valeur est le nombre de caractères EOF consécutifs qui doivent être tapés comme premiers caractères sur une ligne de saisie avant que bash termine. Si la variable existe mais que sa valeur n'est pas numérique ou si elle n'a pas de valeur, la valeur par défaut est 10. Si elle n'existe pas, EOF signifie la fin de la saisie pour l'interpréteur.
INPUTRC
Le nom du fichier de configuration de readline prioritaire sur le fichier par défaut ~/.inputrc (voir READLINE plus bas).
LANG
Utilisée pour déterminer le paramètre linguistique régional pour toute catégorie non spécifiquement sélectionnée par une variable commençant par LC_.
LC_ALL
Cette variable surpasse LANG et toute autre variable LC_ spécifiant une catégorie de paramètres linguistiques régionaux.
LC_COLLATE
Cette variable détermine l'ordre de collation utilisé pour trier les résultats du développement des chemins et détermine le comportement des expressions de plage, des classes d'équivalences et des suites de collations dans le développement des chemins et la correspondance de motifs.
LC_CTYPE
Cette variable détermine l'interprétation des caractères et le comportement des classes de caractères lors du développement des chemins et de la recherche de correspondances de motifs.
LC_MESSAGES
Cette variable détermine le paramètre linguistique régional utilisé pour traduire les chaînes entre guillemets doubles précédées d'un $.
LC_NUMERIC
Cette variable détermine le paramètre linguistique régional utilisé pour formater les nombres.
LINES
Utilisée par la commande interne select pour déterminer la longueur de colonne lors de l'affichage des listes de sélection. Automatiquement mise à la réception d'un signal SIGWINCH.
MAIL
Si ce paramètre correspond à un nom de fichier et si la variable MAILPATH est inexistante, bash informe l'utilisateur de l'arrivée de messages dans le fichier spécifié.
MAILCHECK
Indique l'intervalle (en secondes) avec lequel bash vérifie si un nouveau message est arrivé. La valeur par défaut est 60 secondes. Lorsque le délai est écoulé, l'interpréteur vérifiera la présence d'un courriel avant d'afficher son invite de base. Si cette variable est inexistante, ou mise à une valeur qui n'est pas un nombre positif, l'interpréteur désactive la vérification des courriels.
MAILPATH
Une liste de noms de fichiers séparés par des deux-points « : », dans lesquels on vérifiera l'arrivée de courriel. Le nom d'un fichier peut être suivi d'un point d'interrogation « ? », puis d'une chaîne de caractères spécifiant le message à afficher en cas de courriel. Dans cette chaîne, le paramètre $_ correspond au nom du fichier de courriel courant. Exemple :

MAILPATH='/usr/spool/mail/bfox?"Vous avez du courriel":~/shell-mail?"$_ a du courriel !"'
Bash fournit une valeur par défaut pour cette variable, mais l'emplacement du fichier boîte à lettres dépend du système (par exemple /usr/spool/mail/$USER).
OPTERR
Si mis à la valeur 1, bash affiche les messages d'erreurs engendrés par la commande interne getopts (voir plus bas COMMANDES INTERNES DE L'INTERPRÉTEUR ). OPTERR est initialisée avec la valeur 1 à chaque appel de l'interpréteur ou au lancement d'un script.
PATH
Le chemin de recherche des commandes à exécuter. Il s'agit d'une liste de répertoires, séparés par des deux-points « : » dans lesquels l'interpréteur recherche les commandes (voir plus bas EXÉCUTION DES COMMANDES ). Un nom de répertoire de taille nulle (vide) dans la valeur de PATH désigne le répertoire courant. Un répertoire vide peut apparaître comme deux deux-points consécutifs ou comme des deux-points en début ou en fin. Le chemin par défaut dépend du système et est choisi par l'administrateur installant bash. Une valeur commune est ``/usr/gnu/bin:/usr/local/bin:/usr/ucb:/bin:/usr/bin''.
POSIXLY_CORRECT
Si cette variable existe dans l'environnement lorsque bash démarre, l'interpréteur passe en mode posix avant de lire les fichiers de configuration comme si l'option --posix avait été fournie. Si elle est créée pendant que l'interpréteur est en cours d'exécution, bash active le mode posix comme si la commande set -o posix avait été exécutée.
PROMPT_COMMAND
Si existante, sa valeur est exécutée comme commande préalablement à l'affichage de chaque invite de base.
PS1
La valeur de ce paramètre est développée puis utilisée comme la chaîne d'invite de base (voir INVITE plus bas). La valeur par défaut est « \s-\v\$  ».
PS2
La valeur de ce paramètre est développée comme PS1 puis utilisée comme chaîne d'invite secondaire. La valeur par défaut est «  ».
PS3
La valeur de ce paramètre est utilisée comme l'invite pour la commande select (voir GRAMMAIRE DE L'INTERPRÉTEUR plus haut).
PS4
La valeur de ce paramètre est développée comme PS1 puis affichée entre chaque commande lors d'un suivi d'exécution. Le premier caractère de PS4 est répété autant de fois que nécessaire pour indiquer le niveau d'imbrication. La valeur par défaut est «  ».
SHELL
Le chemin d'accès complet à l'interpréteur de commandes est conservé dans cette variable d'environnement. Si inexistante au démarrage de l'interpréteur, bash lui affecte le chemin d'accès complet à l'interpréteur de commandes de connexion de l'utilisateur courant.
TIMEFORMAT
La valeur de ce paramètre est utilisée en tant que chaîne de format spécifiant comment les informations de paramétrage doivent être affichées pour les conduites précédées du mot réservé time. Le caractère % introduit une suite de caractères d'échappement qui est développée en une valeur de temps ou une autre information. Les suites de caractères d'échappement et leurs significations sont les suivantes ; les accolades marquent les parties facultatives.
%%
Un % seul (non interprété).
%[p][l]R
Le temps écoulé en secondes.
%[p][l]U
Le temps processeur écoulé en mode utilisateur en secondes.
%[p][l]S
Le temps processeur écoulé en mode système en secondes.
%P
Le pourcentage de temps processeur utilisé calculé avec (%U + %S) / %R.
Le p facultatif est un chiffre indiquant la précision, le nombre de chiffres après la virgule. Une valeur de 0 conduit à affichage de nombre entiers. Trois chiffres au plus peuvent être affichés après la virgule ; tout chiffre supérieur à 3 sera changé en 3. Si p n'est pas spécifié, la valeur 3 est utilisée.
Le l facultatif spécifie un format plus long, incluant les minutes, de la forme MMmSS.DDs. La valeur de p détermine si la partie décimale est affichée ou non.
Si cette variable n'existe pas, bash réagit comme si elle avait la valeur $'\nreal\t%3lR\nuser\t%3lU\nsys %3lS'. Si la valeur est vide, aucune information de chronométrage n'est affichée. Un caractère final de saut de ligne est ajouté quand la chaîne de format est affichée.
TMOUT
Si mise à une valeur strictement positive, TMOUT est traitée comme le délai par défaut pour la commande interne read. La commande select termine s'il n'y a pas de saisie au bout de TMOUT secondes lorsque l'entrée vient d'un terminal. Dans un interpréteur interactif, la valeur est interprétée comme le nombre de secondes à attendre pour une saisie après avoir émis l'interpréteur de base. bash termine après avoir attendu pendant ce nombre de secondes si aucune saisie n'est arrivée.
TMPDIR
Si existante, Bash utilise sa valeur comme le nom d'un répertoire dans lequel Bash crée des fichiers temporaires nécessaires au fonctionnement de l'interpréteur.
auto_resume
Cette variable commande le comportement de l'interpréteur vis-à-vis de l'utilisateur et du contrôle des tâches. Si cette variable existe, les commandes simples constituées d'un seul mot, sans redirection, sont considérées comme de possibles relances de tâches suspendues. Aucune ambiguïté n'est possible, si plusieurs tâches commencent par la chaîne saisie, la tâche à laquelle il a été accédé le plus récemment est sélectionnée. Le nom d'une tâche suspendue, dans ce contexte, est la ligne de commande utilisée pour la lancer. Si mise à la valeur exact, la chaîne fournie doit correspondre exactement au nom d'une tâche suspendue ; si mise à substring, la chaîne fournie doit correspondre à une sous-chaîne du nom de la tâche suspendue. La valeur substring donne une fonctionnalité analogue à l'identificateur de tâche %? (voir plus bas CONTRÔLE DES TÂCHES ). Si mise à toute autre valeur, la chaîne fournie doit être le préfixe du nom d'une tâche suspendue ; cela donne une fonctionnalité analogue à l'identificateur de tâche %string.
command_not_found_handle
Le nom d'une fonction de l'interpréteur à appeler si une commande ne peut être trouvée. La valeur renvoyée par cette fonction devrait être 0, si la commande est disponible après exécution de la fonction, sinon 127 (EX_NOTFOUND). Activé seulement dans les interpréteurs interactif, en mode non POSIX. C'est une extension Debian.
histchars
Les deux ou trois caractères commandant le développement de l'historique et le découpage en lexèmes (voir plus bas DÉVELOPPEMENT DE L'HISTORIQUE ). Le premier caractère est le caractère de développement de l'historique, c'est-à-dire celui qui indique le début d'un développement d'historique (normalement « ! »). Le second caractère est celui de substitution rapide, utilisé comme raccourci pour relancer la commande précédente, en modifiant une partie de la chaîne. Par défaut il s'agit de « ^ ». Le troisième caractère facultatif est celui qui indique, lorsqu'on le trouve en début de mot que le reste de la ligne est un commentaire. Normalement on utilise le caractère « # ». Ce caractère de commentaire empêche le développement de l'historique pour tous les mots restants sur la ligne. Il ne conduit pas nécessairement l'analyseur de l'interpréteur à considérer le reste de la ligne comme un commentaire.

Tableaux

Bash fournit des variables tableaux à une dimension. Toute variable peut être utilisée comme tableau ; la commande interne declare peut servir à déclarer explicitement un tableau. Il n'y a pas de limitation maximum à la taille d'un tableau, ni d'obligation que les éléments soient indicés ou affectés de façon contiguë. Les tableaux sont indicés par des entiers en commençant à zéro.

Un tableau est créé automatiquement si une variable quelconque est affectée en utilisant la syntaxe nom[indice]=valeur. L'indice est traité comme une expression arithmétique et s'évalue en un nombre positif. Pour déclarer explicitement un tableau, on utilise declare -a nom (voir plus bas COMMANDES INTERNES DE L'INTERPRÉTEUR ). declare -a nom[indice] est aussi accepté ; l'indice est ignoré. Des attributs peuvent être spécifiés pour une variable tableau en utilisant les commandes internes declare et readonly. Les attributs s'appliquent à tous les éléments d'un tableau.

Les tableaux sont affectés en utilisant l'affectation composée de la forme nom=(valeur_1 ... valeur_n), où chaque valeur est de la forme [indice]=chaîne. Seule la chaîne est obligatoire. Si les crochets et les indices facultatifs sont fournis, les affectations ont lieu en conséquence ; sinon l'indice de l'élément affecté est le dernier indice affecté plus un. Les indices commencent à zéro. Cette syntaxe est aussi acceptée par la commande interne declare. Les éléments individuels du tableau sont affectés en utilisant la syntaxe nom[indice]=valeur présentée plus haut.

On peut accéder à tout élément d'un tableau en utilisant la notation ${nom[indice]}. Les accolades sont nécessaires pour éviter les conflits avec le développement des chemins. Si indice est @ ou *, le mot se développe en tous les éléments de nom. Ces deux indices ne diffèrent que lorsque le mot apparaît entre guillemets doubles. Si le mot est entre guillemets doubles, ${nom[*]} se développe en un seul mot contenant les valeurs de chaque élément du tableau séparées par le premier caractère de la variable spéciale IFS et ${nom[@]} développe chaque élément de nom en un mot distinct. Quand il n'y a pas d'élément dans le tableau, ${nom[@]} ne se développe en rien. Si le développement entre guillemets doubles survient à l'intérieur d'un mot, le développement du premier paramètre est accolé à la première partie du mot original et le développement du dernier paramètre est accolé à la dernière partie du mot original. Le comportement est analogue à celui des paramètres spéciaux * et @ (voir Paramètres spéciaux plus haut). ${#nom[indice]} s'évalue en la longueur de l'élément ${nom[indice]}. Si l'indice est * ou @, s'évalue en le nombre d'éléments dans le tableau. Accéder à une variable tableau sans indice est équivalent à accéder à l'élément zéro.

La commande interne unset sert à détruire les tableaux. unset nom[indice] détruit l'élément de tableau d'indice indice. Un soin particulier doit être apporté afin d'éviter des effets de bords non désirés provoqués par la production des noms de fichiers. unset nom, où nom est un tableau, ou unset nom[indice], avec indice valant * ou @ supprime le tableau entier.

Les commandes internes declare, local et readonly acceptent toutes une option -a pour spécifier un tableau. La commande interne read accepte une option -a pour affecter une liste de mots lus depuis l'entrée standard dans un tableau. Les commandes internes set et declare affichent les valeurs d'un tableau d'une façon qui permet de les réutiliser pour des affectations.

DÉVELOPPEMENTS

Les développements sont appliqués à la ligne de commande après qu'elle a été découpée en mots. Sept types de développements sont effectués : le développement des accolades, le développement du tilde, le développement des paramètres et des variables, la substitution de commande, le développement arithmétique, le découpage en mots et le développement des chemins.

L'ordre des développements est : développement des accolades, du tilde, des paramètres, des variables, arithmétique et substitution de commande (effectuée de la gauche vers la droite), découpage en mots et développement des chemins.

Sur les systèmes qui le supportent, un développement supplémentaire a lieu : la substitution de processus.

Seuls le développement des accolades, le découpage en mots et le développement des chemins peuvent modifier le nombre de mots. Les autres développement transforment un mot unique en un autre mot unique. La seule exception à cette règle est le développement de « $@ » et « ${nom[@]} » comme expliqué plus haut (voir PARAMÈTRES ).

Développement des accolades

Le développement des accolades est un mécanisme permettant de produire des chaînes quelconques. Il est similaire au développement des chemins, mais les noms de fichiers produits n'existent pas nécessairement. Les motifs qui seront développés prennent la forme d'un préambule facultatif, suivi par soit une série de chaînes séparées par des virgules, soit l'expression d'une série entre accolades, suivi par un post-scriptum facultatif. Le préambule est inséré devant chacune des chaînes contenues entre les accolades et le post-scriptum est concaténé à la fin de chacune des chaînes résultantes, le développement se faisant de gauche à droite.

Plusieurs développements d'accolades peuvent être imbriqués. Les résultats de chaque développement ne sont pas triés, l'ordre de gauche à droite est conservé. Par exemple a{d,c,b}e se développe en « ade ace abe ».

Une expression d'une série est de la forme {x..y}, où x et y sont soit des entiers, soit des caractères seuls. Lorsqu'il s'agit d'entiers, l'expression est remplacée par la liste des nombres entre x et y, x et y compris. S'il s'agit de caractères, l'expression se développe en l'ensemble des caractères situés entre x et y d'un point de vue lexicographique. Remarquez que x et y doivent être du même type.

Le développement des accolades est effectué avant tout autre développement et tous les caractères ayant une signification spéciale pour les autres développements sont conservés dans le résultat. Il s'agit d'une modification purement littérale. Bash n'effectue aucune interprétation syntaxique du texte entre les accolades.

Un développement d'accolades correctement formé doit contenir des accolades ouvrantes et fermantes non protégées et au moins une virgule non protégée ou une expression d'une série correcte. Tout développement d'accolades incorrectement formé est laissé inchangé. Un { ou un , peuvent être protégés par une contre-oblique pour éviter d'être considérés comme partie d'une expression entre accolades. Pour éviter tout conflit avec le développement des paramètres, la chaîne ${ n'est pas considérée comme éligible au développement des accolades.

Cette construction est typiquement utilisée comme raccourci lorsque le préfixe commun aux chaînes à engendrer est plus long que dans l'exemple ci-dessus :


mkdir /usr/local/src/bash/{old,new,dist,bugs}
ou
chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}}

Le développement des accolades induit une légère incompatibilité avec les versions historiques de sh. sh n'effectue aucun traitement sur les accolades ouvrantes et fermantes lorsqu'elles apparaissent dans un mot et les laisse inchangées. Bash supprime les accolades dans les mots, après développement. Par exemple, si l'on fournit à sh le mot file{1,2}, il reste inchangé en sortie. Par contre, il est transformé en file1 file2 par bash. Si une compatibilité stricte avec sh est nécessaire, lancez bash avec l'option +B ou désactivez le développement des accolades avec l'option +B de la commande set (voir plus bas COMMANDES INTERNES DE L'INTERPRÉTEUR ).

Développement du Tilde

Si un mot commence avec un caractère tilde (« ~ ») non protégé, tous les caractères précédant la première barre oblique non protégée (voire tous les caractères s'il n'y a pas de barre oblique non protégée), sont considérés comme un préfixe tilde. Si aucun caractère du préfixe tilde n'est protégé, les caractères suivant le tilde sont traités comme un possible identifiant de connexion. Si cet identifiant de connexion est une chaîne vide, le tilde est remplacé par la valeur du paramètre d'interpréteur HOME. Si HOME est inexistante, le répertoire d'accueil de l'utilisateur exécutant l'interpréteur est utilisé à la place. Sinon le préfixe tilde est remplacé par le répertoire d'accueil associé à l'identifiant de connexion spécifié.

Si le préfixe tilde est « ~+ », la valeur de la variable de l'interpréteur PWD le remplace. Si le préfixe tilde est « ~- », la valeur de la variable de l'interpréteur OLDPWD, si existante, lui est substituée. Si les caractères à la suite du tilde dans le préfixe tilde représentent un nombre N préfixé facultativement par un « + » ou un « - » le préfixe tilde est remplacé par l'élément correspondant de la pile de répertoires telle qu'il serait affiché par la commande interne dirs appelée avec le préfixe tilde en argument. Si les caractères à la suite du tilde dans le préfixe tilde représentent un nombre sans un « + » ou « - » en tête, on suppose qu'il s'agit de « + ».

Si l'identifiant de connexion est incorrect ou si le développement du tilde échoue, le mot est inchangé.

Chaque affectation de variable vérifie immédiatement la présence de préfixes tilde non protégés suivant un : ou le premier =. Dans ces cas, le développement des tildes est aussi effectué. On peut donc utiliser des noms de fichiers avec des tildes dans des affectations de PATH, MAILPATH et CDPATH et l'interpréteur affectera la valeur développée.

Remplacement des paramètres

Le caractère « $ » permet d'introduire le développement des paramètres, la substitution de commande ou le développement arithmétique. Le nom du paramètre ou du symbole à développer peut être encadré par des accolades qui sont facultatives mais servent à éviter le développement de la variable à partir de caractères la suivant immédiatement qui pourraient être considérés comme appartenant à son nom.

Lorsque les accolades sont utilisées, l'accolade de fin correspondante est le premier caractère « } » non protégé par une contre-oblique ni inclus dans une chaîne protégée, ni dans un développement arithmétique, une substitution de commande ou un développement des paramètres.

${paramètre}
est remplacé par la valeur du paramètre. Les accolades sont nécessaire quand le paramètre est un paramètre positionnel ayant plusieurs chiffres, ou si le paramètre est suivi de caractères n'appartenant pas à son nom.

Si le premier caractère du paramètre est un point d'exclamation, un niveau d'indirection de variable est introduit. Bash utilise la valeur de la variable formée par le reste du paramètre comme un nom de variable. Cette variable est alors développée et la valeur utilisée pour le reste de la substitution plutôt que la valeur du paramètre lui-même. On appelle ce mécanisme le développement indirect. Les exceptions à celui-ci sont les développements de ${!prefix*} et de ${!nom[@]} décrits plus bas. Le point d'exclamation doit immédiatement suivre l'accolade ouvrante afin d'introduire l'indirection.

Dans chacun des cas ci-dessous, le mot est soumis au développement du tilde, au développement des paramètres, à la substitution de commande et au développement arithmétique. Quand il n'effectue pas de développement de sous-chaîne, bash teste si le paramètre est inexistant ou vide ; l'absence des deux-points induit un test sur la seule inexistence du paramètre.

${paramètre:-mot}
Utilisation de valeurs par défaut. Si le paramètre est inexistant ou vide, le développement du mot et substitué. Sinon, c'est la valeur du paramètre qui est substituée.
${paramètre:=mot}
Affectation d'une valeur par défaut. Si le paramètre est inexistant ou vide, le développement du mot lui est affecté. La valeur du paramètre est alors substitué. Les paramètres positionnels et spéciaux ne peuvent pas être affectés de cette façon.
${paramètre:?mot}
Affichage d'erreur si vide ou inexistant. Si le paramètre est inexistant ou vide, le développement du mot (ou un message approprié si aucun mot n'est fourni) est affiché sur la sortie d'erreur standard et l'interpréteur termine, s'il n'est pas interactif. Sinon, la valeur du paramètre est substituée.
${paramètre:+mot}
Utilisation d'une valeur différente. Si le paramètre est vide ou inexistant, rien n'est substitué. Sinon le développement du mot est substitué.
${paramètre:début}
${paramètre:début:longueur}
Extraction de sous-chaînes. Se développe pour fournir la sous-chaîne de la longueur indiquée (comptée en caractères) commençant au début. Si la longueur est omise, fournit la sous-chaîne commençant au caractère de début et s'étendant jusqu'à la fin du paramètre. La longueur et le début sont des expressions arithmétiques (voir ÉVALUATION ARITHMÉTIQUE plus bas). La longueur doit être positive. Si le début est négatif, sa valeur est considérée à partir de la fin du contenu du paramètre. Les expressions arithmétiques commençant par un - doivent être séparées par une espace des : (deux-points) les précédant pour être distinguées du développement Utilisation de valeurs par défaut. Si le paramètre est @, le résultat correspond aux longueur paramètres positionnels commençant au début. Si le paramètre est un nom de tableau indicé par @ ou *, le résultat est les longueur éléments du tableau commençant à ${paramètre[début]}. Une valeur négative de début est prise relativement à la valeur maximum de l'indice du tableau considéré, augmentée de un. Remarquez qu'une valeur négative de début doit être séparée du deux-points par au moins une espace pour éviter toute confusion avec le développement de « :-  ». L'indexation des sous-chaînes débute à zéro, sauf pour les paramètres positionnels pour lesquels l'indexation commence à 1.
${!préfixe*}
${!préfixe@}
Se développe en les noms des variables dont les noms commencent par préfixe, séparés par le premier caractère de la variable spéciale IFS.
${!nom[@]}
${!nom[*]}
Si nom est une variable de type tableau, elle se développe en la liste des indices (clefs) du tableau affecté à nom. Si nom n'est pas un tableau, se développe en 0 si nom existe et en vide sinon. Quand @ est utilisé et que le développement apparaît entre guillemets doubles, chaque clef se développe en un mot séparé.
${#paramètre}
Est remplacé par la longueur, en caractères, de la valeur du paramètre. Si le paramètre est * ou @, la valeur est le nombre de paramètres positionnels. Si le paramètre est un nom de tableau indicé par * ou @, la valeur donnée est le nombre d'éléments dans le tableau.
${paramètre#mot}
${paramètre##mot}
Le mot est développé pour fournir un motif, comme dans le développement des chemins. Si le motif correspond au début de la valeur du paramètre, alors le développement prend la valeur du paramètre après suppression du plus petit motif commun (cas « # ») ou du plus long motif (cas « ## »). Si le paramètre est @ ou *, l'opération de suppression de motif est appliquée à chaque paramètre positionnel tour à tour et le développement est la liste résultante. Si le paramètre est une variable tableau indicée par @ ou *, l'opération de suppression de motif est appliquée à chaque élément du tableau tour à tour et le développement est la liste résultante.
${paramètre%mot}
${paramètre%%mot}
Le mot est développé pour fournir un motif, comme dans le développement des chemins. Si le motif correspond à une portion finale de la valeur développée du paramètre, alors le développement prend la valeur du paramètre après suppression du plus petit motif commun (cas « % ») ou du plus long motif (cas « %% »). Si le paramètre est @ ou *, l'opération de suppression de motif est appliquée à chaque paramètre positionnel tour à tour et le développement est la liste résultante. Si le paramètre est une variable tableau indicée par @ ou *, l'opération de suppression de motif est appliquée à chaque élément du tableau tour à tour et le développement est la liste résultante.
${paramètre/motif/chaîne}
${paramètre//motif/chaîne}
Le motif est développé comme dans le traitement des chemins. Le paramètre est développé et la plus longue portion correspondant au motif est remplacée par la chaîne. Dans la première forme, seule la première correspondance est remplacée. La seconde forme conduit au remplacement par chaîne de toutes les correspondances au motif. Si le motif commence par #, il doit correspondre au début de la valeur développée du paramètre. Si le motif commence par %, il doit correspondre à la fin du développement du paramètre. Si la chaîne est vide, les portions correspondant au motif sont supprimées et le / après le motif peut être omis. Si le paramètre est @ ou *, l'opération de substitution est appliquée à chacun des paramètres positionnels tour à tour et le développement est la liste résultante. Si le paramètre est une variable tableau indicée par @ ou *, l'opération de substitution s'applique à chaque élément du tableau tour à tour et le développement est la liste résultante.

Substitution de commande

La substitution de commande permet de remplacer le nom d'une commande par son résultat. Il en existe deux formes :


$(commande)
ou
`commande`

Bash effectue la substitution en exécutant la commande et en la remplaçant par sa sortie standard, dont les éventuels sauts de lignes finaux sont supprimés. Les sauts de lignes internes ne sont pas supprimés mais peuvent disparaître lors du découpage en mots. La substitution de commande $(cat fichier) peut être remplacée par l'équivalent plus rapide $(< fichier).

Quand l'ancienne forme de substitution avec les accents graves « ` » est utilisée, le caractère contre-oblique garde sa signification propre sauf lorsqu'il est suivi de $, ` ou \. Le premier accent grave non protégé par une contre-oblique termine la substitution de commande. Quand on utilise la forme $(commande), tous les caractères entre parenthèses constituent la commande ; aucun n'est traité spécifiquement.

Les substitutions de commande peuvent être imbriquées. Pour imbriquer en utilisant la forme à accents graves, il faut protéger les accents graves internes avec des contre-obliques.

Si la substitution apparaît entre guillemets doubles, le découpage en mots et le développement des chemins ne sont pas effectués sur ses résultats.

Développement arithmétique

Le développement arithmétique permet de remplacer une expression arithmétique par le résultat de son évaluation. Le format du développement arithmétique est :


$((expression))

L'ancien format $[expression] est obsolète et sera supprimé dans les prochaines versions de bash.

L'expression est traitée comme si elle était entre guillemets doubles, mais un guillemet double à l'intérieur de parenthèses n'est pas traité spécifiquement. Tous les lexèmes dans l'expression sont sujet au développement des paramètres, à la substitution de commande et à la suppression des protections. Les développements arithmétiques peuvent être imbriqués.

L'évaluation est effectuée en suivant les règles décrites plus bas dans ÉVALUATION ARITHMÉTIQUE. Si l'expression est incorrecte, bash affiche un message indiquant l'échec et aucune substitution n'a lieu.

Substitution de processus

La substitution de processus n'est disponible que sur les systèmes acceptant le mécanisme des tubes nommés (FIFO) ou la méthode /dev/fd de noms de fichiers. Elle prend la forme <(liste) ou >(liste). La liste de processus est exécutée avec son entrée ou sa sortie connectée à une FIFO ou à un fichier dans /dev/fd. Le nom de ce fichier est passé en argument à la commande qui sera exécutée comme résultat de cette substitution. Si on utilise la forme >(liste), l'écriture dans le fichier fournira des entrées pour la liste. Si la forme <(liste) est utilisée, le fichier passe en argument devra être lu pour obtenir la sortie de la liste.

Sur les systèmes qui le permettent, la substitution de processus est effectuée simultanément au développement des paramètres et variables, à la substitution de commande et au développement arithmétique.

Découpage en mots

Les résultats du développement des paramètres, de la substitution de commande et du développement arithmétique qui ne se trouvent pas entre guillemets doubles sont analysés par l'interpréteur afin d'appliquer le découpage en mots.

L'interpréteur considère chaque caractère du paramètre IFS comme un délimiteur et découpe le résultat des transformations précédentes en fonction de ceux-ci. Si IFS est inexistante ou si sa valeur est exactement <espace><tabulation><saut de ligne>, la valeur par défaut, alors toute suite de caractères de IFS sert à délimiter les mots. Si IFS a une valeur autre que celle par défaut, alors les suites de caractères blancs espace et tabulation sont ignorées en début et fin de mot, à condition que ces caractères blancs se trouvent dans la valeur de IFS (un caractère blanc de IFS ). Tout caractère de IFS qui n'est pas un caractère blanc, se trouvant à côté d'un caractère blanc de IFS, délimite un champ. Une suite de caractères blancs de IFS est également traitée comme un délimiteur. Si la valeur de IFS est vide, aucun découpage en mots n'a lieu.

Les arguments vides explicites ("" ou '') sont conservés. Les arguments vides implicites non protégés, résultant du développement des paramètres qui n'ont pas de valeurs, sont supprimés. Si un paramètre sans valeur est développé entre guillemets doubles, le résultat est un argument vide qui est conservé.

Remarquez que si aucun développement n'a lieu, le découpage en mots n'est pas effectué.

Développement des chemins

Après le découpage en mots, à moins que l'option -f soit présente, bash recherche dans chaque mot les caractères *, ? et [. Si l'un d'eux apparaît, le mot est considéré comme un motif et remplacé par une liste, classée par ordre alphabétique, des noms de fichiers correspondant à ce motif. Si aucun nom de fichier ne correspond et si l'option d'interpréteur nullglob est désactivée, le mot reste inchangé. Si l'option nullglob existe et si aucune correspondance n'est trouvée, le mot est supprimé. Si l'option d'interpréteur failglob existe et si aucune correspondance n'est trouvée, un message d'erreur est affiché et la commande n'est pas exécutée Si l'option d'interpréteur nocaseglob est activée, la correspondance est effectuée sans tenir compte de la casse des caractères alphabétiques. Remarquez que lorsque des expressions de plage comme [a-z] (voir plus bas) sont utilisées les lettres de l'autre casse peuvent être incluses, selon le paramétrage de LC_COLLATE. Quand un motif est utilisé pour le développement des chemins, le caractère « . » au début d'un nom ou immédiatement à la suite d'une barre oblique doit être explicitement mis en correspondance, à moins que l'option d'interpréteur dotglob n'existe. Lors de la correspondance avec un chemin, le caractère barre oblique doit toujours être mis en correspondance explicitement. Dans les autres cas, le caractère « . » n'est pas traité spécifiquement. Voyez la description de la commande shopt dans COMMANDES INTERNES DE L'INTERPRÉTEUR pour une description des options d'interpréteur nocaseglob, nullglob, failglob et dotglob.

La variable de l'interpréteur GLOBIGNORE peut servir à restreindre l'ensemble des noms de fichiers correspondant à un motif. Si GLOBIGNORE existe, chaque nom de fichier qui correspond aussi à un motif de GLOBIGNORE est supprimé de la liste des correspondances. Les noms de fichiers « . » et « .. » sont toujours ignorés quand GLOBIGNORE existe et n'est pas vide. Toutefois, configurer GLOBIGNORE avec une valeur non vide a pour effet d'activer l'option d'interpréteur dotglob, ainsi tous les autres noms de fichiers commençant par « . » correspondront. Pour obtenir l'ancien comportement ignorant les noms commençant par « . », placez « .* » dans l'un des motifs de GLOBIGNORE. L'option dotglob est désactivée si la variable GLOBIGNORE est inexistante.

Motifs génériques

Tout caractère apparaissant dans un motif, hormis les caractères spéciaux décrits plus bas correspond avec lui-même. Le caractère NUL ne peut pas se trouver dans un motif. Une contre-oblique protège le caractère qui la suit ; la contre-oblique de protection est supprimée lors de la recherche de correspondance. Les caractères spéciaux de motifs doivent être protégés s'ils sont destinés à une correspondance littérale.

Les caractères spéciaux ont les significations suivantes :

*
Correspond à toute chaîne, y compris la chaîne vide.
?
Correspond à n'importe quel caractère.
[...]
Correspond à tout caractère entre les crochets. Un couple de caractères séparés par un trait d'union indique une expression de plage ; tout caractère qui correspond à n'importe quel caractère situé entre les deux bornes incluses, en utilisant les suites de collations des paramètres linguistiques régionaux courants et le jeu de caractères. Si le premier caractère suivant le [ est un ! ou un ^ alors la correspondance se fait sur tous les caractères hors plage. L'ordre de tri des caractères dans les expressions de plage est déterminé par les paramètres linguistiques régionaux courants et par la valeur de la variable de l'interpréteur LC_COLLATE si existante. Un - peut être mis en correspondance en l'incluant en premier ou dernier caractère de l'ensemble. Un ] peut être mis en correspondance en l'incluant en premier caractère de l'ensemble.

Entre [ et ], on peut indiquer une classe de caractère en utilisant l