Scroll to navigation

BASH(1) General Commands Manual BASH(1)

NOM

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

SYNOPSIS

bash [options] [chaîne_de_commande | fichier]

COPYRIGHT

Bash is Copyright (C) 1989-2025 by the Free Software Foundation, Inc.

DESCRIPTION

bash est un interpréteur de langage de commandes (shell) qui exécute les commandes lues depuis l'entrée standard, depuis une chaîne ou depuis un fichier. C'est une réimplémentation et une extension du Bourne shell, l'interpréteur de langage de commande Unix historique. bash inclut aussi des fonctionnalités utiles des interpréteurs de commandes Korn et C (ksh et csh).

POSIX est le nom d'une famille de normes informatiques basées sur Unix. bash est destiné à être une implémentation conforme à la partie « Shell and Utilities » de la spécification IEEE POSIX (Norme IEEE 1003.1). Le mode POSIX de bash (ci-après appelé mode posix) modifie le comportement de l'interpréteur de commandes quand son fonctionnement par défaut est différent de la norme afin de s'y conformer strictement. Consultez VOIR AUSSI ci-dessous pour une référence à un document qui détaille la manière dont le mode posix affecte le comportement de bash. bash peut être configuré pour être conforme à POSIX par défaut.

OPTIONS

Toutes les options d'interpréteur monocaractères documentées dans la description de la commande interne set, y compris -o, peuvent être utilisées comme options si l'interpréteur est invoqué. De plus, bash accepte les options suivantes lors de son appel :

Si l'option -c est présente, les commandes sont lues depuis le premier argument chaîne_de_commande qui n’est pas une option. Si des arguments suivent la chaîne_de_commande, le premier argument est assigné à $0 et tous les autres sont affectés aux paramètres positionnels. Le nom de l'interpréteur, utilisé pour les messages d'avertissement et d'erreur, est fixé par l'affectation à $0.
Si l'option -i est présente, l'interpréteur est interactif.
Faire que bash se comporte comme s'il avait été appelé comme interpréteur de commandes de connexion (consultez APPEL ci-dessous).
Si l'option -r est présente, l'interpréteur devient restreint (consultez INTERPRÉTEUR RESTREINT ci-dessous).
Si l'option -s est présente ou s'il ne reste plus d'argument après le traitement des options, l'interpréteur lit les commandes depuis l'entrée standard. Cette option permet d'affecter les paramètres positionnels lors de l'appel d'un interpréteur interactif ou de la lecture de l'entrée à travers un tube.
Afficher les lignes en entrée de l'interpréteur lorsqu'elles sont lues.
Afficher les commandes et leurs arguments à mesure qu'elles sont exécutées.
Afficher une liste de toutes les chaînes entre guillemets doubles précédées de $ sur la sortie standard. Ce sont les chaînes qui sont soumises à 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 (consultez COMMANDES INTERNES DE L'INTERPRÉTEUR ci-dessous). Si option_shopt est présente, -O crée cette option ; +O la détruit. Si option_shopt n'est pas fournie, bash affiche sur la sortie standard les noms et valeurs des options de l'interpréteur acceptées par shopt. Si l'option d'appel est +O, la sortie est affichée dans un format réutilisable en entrée.
--
Deux tirets -- indiquent la fin des options et désactivent le traitement d'options. Tous les arguments après le -- sont traités comme le nom d'un fichier de script d'interpréteur (voir ci-dessous) et des arguments passés à ce script. - avec un argument 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.

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 (consultez ci-dessous la description de l'option extdebug de la commande interne shopt).
Équivalent à -D, mais la sortie est dans le format des fichiers GNU gettext “po” (objets portables) de l'outil GNU gettext(1).
Équivalent à -D.
Affiche un message d'aide sur la sortie standard et termine avec succès.
--init-file 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 du fichier d'initialisation personnel standard ~/.bashrc si l'interpréteur est interactif (consultez INVOCATION ci-dessous).
Équivalent à -l.
Ne pas utiliser la bibliothèque GNU readline pour lire les lignes de commande, lorsque l'interpréteur est interactif.
Ne lire ni le fichier d'initialisation commun à tout le système /etc/profile ni aucun des fichiers d'initialisation personnels ~/.bash_profile, ~/.bash_login ou ~/.profile défaut, bash lit ces fichiers quand il est appelé comme interpréteur de commandes de connexion (consultez APPEL ci-dessous).
Ne pas lire ou exécuter le fichier d'initialisation commun à tout le système /etc/bash.bashrc, ni le fichier personnel d'initialisation ~/.bashrc si l'interpréteur est interactif. Cette option est activée par défaut si l'interpréteur est appelé sous le nom sh.
Activer le mode POSIX ; modifier le comportement de bash quand le fonctionnement par défaut diffère de la norme POSIX pour correspondre à la norme.
L'interpréteur devient restreint (consultez INTERPRÉTEUR RESTREINT ci-dessous).
Équivalent à -v.
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 traité comme le nom du fichier dans lequel lire les commandes d'interpréteur (un script shell). Si bash est appelé de cette façon, le nom du fichier est affecté à $0 et les arguments restants aux autres paramètres positionnels. bash lit et exécute les commandes depuis ce fichier, puis termine. Le code de retour de bash est celui de la dernière commande exécutée dans le script. Si aucune commande n'a été exécutée, le code de retour est 0. bash tente d'abord d'ouvrir le fichier dans le répertoire actuel 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 interactif est un interpréteur appelé sans argument autre que des options (à moins que l'option -s soit spécifiée) et sans l'option -c, dont l'entrée standard et la sortie d'erreur sont toutes deux connectées à des terminaux (comme déterminé par la fonction isatty(3)), ou qui est appelé avec l'option -i. bash définit PS1 et $- contient la lettre i si interpréteur est interactif, ce qui permet à un script shell ou à un fichier d’initialisation de tester cet état.

Le paragraphe suivant décrit comment bash exécute ses fichiers d'initialisation. Si un de ces fichiers existe mais n'est pas accessible en lecture, bash signale une erreur. Les tildes sont développés en des noms de fichier comme décrit ci-dessous dans Développement du tilde dans le paragraphe DÉVELOPPEMENTS.

Lorsque bash est appelé comme interpréteur de commandes de connexion interactif, ou comme un interpréteur de commandes non interactif avec l'option --login, il lit et exécute d'abord les commandes du fichier /etc/profile, si ce fichier existe. Après la lecture de ce fichier, il cherche ~/.bash_profile, ~/.bash_login et ~/.profile, dans cet ordre et lit et exécute les commandes du premier d'entre eux qui existe et est accessible en lecture. L'option --noprofile peut être utilisée au démarrage de l'interpréteur pour inhiber ce comportement.

Lorsqu'un interpréteur de commandes de connexion interactif termine, ou qu'un interpréteur de commandes de connexion non interactif exécute la commande interne exit, 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 n'utilise pas la valeur de la variable PATH 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 à la norme 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 les commandes de /etc/profile et ~/.profile, dans cet ordre. L'option --noprofile empêche 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 ni de lire, ni d'exécuter des commandes d'un 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 de ligne de commande, il suit la norme POSIX pour les fichiers de démarrage. Dans ce mode, les interpréteurs interactifs développent la variable ENV et lisent et exécutent les commandes à 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é avec son entrée standard reliée à une connexion réseau, comme quand il est exécuté par le démon distant d'interpréteur de commandes historique et rarement vu, généralement rshd, ou le démon d'interpréteur sécurisé sshd. Si bash conclut qu'il est exécuté de façon non interactive de cette manière, il lit et exécute les commandes de etc/bash.bashrc et ~/.bashrc, si ces fichiers existent et sont accessibles en lecture. 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 à la place de ~/.bashrc, mais généralement rshd et sshd n'appellent pas l'interpréteur avec ces options et ne permettent pas de les spécifier.

Si l'interpréteur est lancé avec un identifiant effectif d'utilisateur (de groupe) différent de l'identifiant réel d'utilisateur (de groupe) 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 de l'environnement, les variables SHELLOPTS, BASHOPTS, CDPATH et GLOBIGNORE, si présentes dans l'environnement, sont ignorées, et l'identifiant effectif de l'utilisateur est configuré à celui de l'identifiant réel de l'utilisateur. Si l'option -p est fournie à l'appel, le comportement au démarrage est le même mais l'identifiant effectif de l'utilisateur n'est pas modifié.

DÉFINITIONS

Les définitions suivantes sont utilisées dans toute la suite ce document.

Une espace ou une tabulation.
Un caractère appartenant à la classe space de caractères des paramètres linguistiques régionaux actuels ou pour lequel isspace(3) renvoie vrai.
Une suite de caractères considérée comme une unité élémentaire par l'interpréteur. On parle également de lexème (« token »).
Un mot ne contenant que des caractères alphanumériques et des tirets bas (« underscore »), commençant par une lettre ou un tiret bas. On s'y réfère également sous le terme identificateur.
Un caractère qui, non protégé, sépare les mots. Un de ceux-ci :

| & ; ( ) < > space tab newline

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 (consultez GRAMMAIRE DE L'INTERPRÉTEUR ci-dessous), le troisième mot d'une commande case ou select (seul in est valable), ou le troisième mot d'une commande for (seuls in et do sont valables) :

! case coproc do done elif else esac fi for function if in select then until while { } time [[ ]]

GRAMMAIRE DE L'INTERPRÉTEUR

Cette partie décrit la syntaxe des différentes formes de commande 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 indique 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 code de retour ou 128+n si la commande a été terminée par le signal n.

Pipelines

Un pipeline est une suite d'une ou plusieurs commandes séparées par un des opérateurs de contrôle | ou |&. Le format d'un pipeline 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 indiquée par la commande_1 (consultez REDIRECTIONS ci-dessous). Si |& est l'opérateur de pipeline, la sortie d'erreur standard de la commande_1, en plus de sa sortie standard, est connectée à l'entrée standard de la commande_2 dans le tube ; c'est un raccourci pour 2>&1 |. Cette redirection implicite de la sortie d'erreur standard vers la sortie standard est réalisée après toute redirection spécifiée par la commande_1.

Le code de retour d'un pipeline est celui de la dernière commande, à moins que l'option pipefail soit activée. Si pipefail est activée, le code de retour du pipeline est celui de la dernière commande (la plus à droite) se terminant avec un code de retour 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 un pipeline, le code de retour de ce pipeline sera la négation logique du code de retour tel que décrit ci-dessus. Si un pipeline est exécuté de façon synchrone, l'interpréteur attend que toutes les commandes du pipeline soient terminées avant de renvoyer une valeur.

Si le mot réservé time précède un pipeline, l'interpréteur rapporte le temps écoulé ainsi que temps utilisateur et le temps système consommés par son exécution quand le pipeline se termine. L'option -p modifie le format de sortie pour celui indiqué par POSIX . Quand l'interpréteur est en mode POSIX, il ne reconnaît pas time comme un mot réservé si le lexème suivant commence par un “-”. La valeur de la variable TIMEFORMAT est une chaîne de format indiquant comment les informations de chronométrage doivent être affichées ; consultez ci-dessous la description de TIMEFORMAT dans Variables de l'interpréteur.

Quand l'interpréteur est en mode POSIX, time peut apparaître seul comme le seul mot dans une commande simple. Dans ce cas, l'interpréteur affiche le temps utilisateur et système total consommé par l'interpréteur et ses enfants. La variable TIMEFORMAT indique le format des informations de temps.

Toute commande dans un pipeline multicommande, où les tubes sont créés, est exécutée dans un sous-interpréteur qui est un processus séparé. Consultez ENVIRONNEMENT D'EXÉCUTION DES COMMANDES pour une description des sous-interpréteurs et d'un environnement de sous-interpréteur. Si l'option lastpipe est activée en utilisant la commande interne shopt (consultez la description de shopt ci-dessous), et que le contrôle des tâches est désactivé, le dernier élément d'un pipeline peut être exécuté par le processus de l'interpréteur.

Listes

Une liste est une suite d'un ou plusieurs pipelines séparés par l'un des opérateurs ;, &, && ou || et facultativement terminée par ;, & ou <changement de ligne>.

Parmi ces opérateurs de liste, && et || ont une priorité identique, suivis de ; et &, qui ont également une priorité identique.

Une suite d'un ou plusieurs changements 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 le code de retour est 0. Elles sont désignées comme des commandes asynchrones. Les commandes séparées par un ; sont exécutées successivement, l'interpréteur attend que chaque commande se termine tour à tour. La valeur renvoyée est le code de retour de la dernière commande exécutée.

Les listes ET et OU sont des suites d'un ou plusieurs pipelines séparés respectivement par les opérateurs de contrôle && et ||. Les listes ET et OU sont exécutées avec associativité à gauche. Une liste ET est de la forme

commande_1 && commande_2

commande_2 est exécutée si, et seulement si, commande_1 renvoie zéro comme code de retour (succès).

Une liste OU a la forme

commande_1 || commande_2

commande_2 est exécutée si, et seulement si, commande_1 renvoie un code de retour différent de zéro. La valeur renvoyée par des listes ET et OU est le code de retour de la dernière commande exécutée dans la liste.

Commandes composées

Une commande composée est l'une des constructions suivantes. Dans la plupart des cas, une liste dans une description de commande peut être séparée du reste de la commande par un ou plusieurs changements de ligne, et peut être suivie d’un changement de ligne à la place d’un point-virgule.

(liste)
liste est exécutée dans un sous-interpréteur (consultez ENVIRONNEMENT D'EXÉCUTION DES COMMANDES ci-dessous pour une description d'un environnement de sous-interpréteur). Les affectations de variables et les commandes internes qui affectent l'environnement de l'interpréteur n'ont plus d'effet une fois que la commande se termine. La valeur renvoyée est le code de retour final de la liste.
{ liste; }
La liste est exécutée avec l'environnement de l'interpréteur en cours. La liste doit se terminer par un changement de ligne ou un point-virgule. Cette construction est connue sous le nom de commandes groupées. La valeur renvoyé est le code de retour 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 un blanc ou un autre métacaractère de l'interpréteur.
((expression))
L'expression arithmétique est évaluée selon les règles décrites ci-dessous dans ÉVALUATION ARITHMÉTIQUE. Si la valeur arithmétique de l'expression est différente de zéro, le code de retour est 0 ; sinon le code de retour est 1. L'expression est sujette aux mêmes développements que si elle était entre guillemets doubles, mais les caractères guillemet double qui ne sont pas échappés dans l'expression ne sont pas traités expressément et sont supprimés. Comme cela peut aboutir potentiellement à des chaînes vides, cette commande les traite comme des expressions qui s'évaluent à 0.
[[ expression ]]
Évalue l'expression conditionnelle expression et renvoie un code deretour de zéro (vrai) ou une valeur différente de zéro (faux). Les conditions sont composées de primitives décrites ci-dessous dans EXPRESSIONS CONDITIONNELLES. Les mots entre [[ et ]] ne sont sujets ni au découpage en mots, ni au développement des chemins. L'interpréteur effectue 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 sur ces mots. Les opérateurs conditionnels comme -f ne doivent pas être protégés afin d'être reconnus comme primitives.
Lorsqu'ils sont utilisés avec [[, les opérateurs < et > ordonnent d'un point de vue lexicographique en utilisant les paramètres linguistiques régionaux actuels.

Consultez la description de la commande interne test (consultez COMMANDES INTERNES DE L'INTERPRÉTEUR ci-dessous) pour la gestion des paramètres (c'est-à-dire des paramètres manquants).

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 ci-dessous dans Motifs génériques, comme si l'option extglob de l'interpréteur était activée. l'opérateur = est équivalent à ==. 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 capitale/minuscule) des caractères alphabétiques. La valeur renvoyée est 0 si les chaînes correspondent (==) ou ne correspondent pas (!=) au motif et 1 sinon. Si une partie du motif est protégée, la partie protégée est mise en correspondance en tant que chaîne : chaque caractère dans la partie protégée correspond à lui-même, au lieu d'avoir une signification particulière de correspondance de motif.
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 POSIX et est mise en correspondance en conséquence (en utilisant les interfaces POSIX regcomp et regexec habituellement décrites dans 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 par 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 des caractères alphabétiques.
Si une partie du motif est protégée, cette partie est mise en correspondance littéralement comme ci-dessus. Si le motif est stocké dans une variable de l'interpréteur, la protection de développement de variable force le motif entier à correspondre littéralement. Traitez prudemment les expressions entre crochets des expressions rationnelles, car les caractères de protection et de motifs habituels perdent leur signification entre crochets.
La correspondance réussit si le motif correspond à n'importe quelle partie de la chaîne. Ancrer le motif avec les opérateurs d'expression rationnelle ^ et $ pour le forcer à correspondre à la totalité de la chaîne.
La variable de type tableau BASH_REMATCH enregistre quelle partie de la chaîne correspond au motif. L'élément de BASH_REMATCH d'indice 0 contient la partie de la chaîne correspondant à la totalité de l'expression rationnelle. Les sous-chaînes correspondant aux sous-expressions entre parenthèses dans l'expression rationnelle sont sauvegardées avec les indices restants de BASH_REMATCH. L'élément de BASH_REMATCH d'indice n est la partie de la chaîne correspondant à la n-ième sous-expression entre parenthèses. La configuration de BASH_REMATCH par bash est de portée globale ; la déclarer comme une variable locale mènera à des résultats inattendus.
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 outrepasser la priorité normale des opérateurs.
! expression
Vrai si expression est fausse.
Vrai si expression1 et expression2 sont toutes les deux vraies.
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 l'expression conditionnelle tout entière.

Développer d'abord la liste de mots suivant in, produisant une liste d'éléments. Ensuite, 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 (consultez PARAMÈTRES ci-dessous). La valeur renvoyée est le code de retour 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 le code de retour est 0.
L'expression arithmétique expr1 est d'abord évaluée selon les règles décrites ci-dessous 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 à une valeur différente de zéro, liste est exécutée et l'expression arithmétique expr3 est évaluée. Si l'une des expressions est omise, elle est considérée comme s'évaluant à 1. La valeur renvoyée est le code de retour de la dernière commande dans liste qui est exécutée ou une valeur différente de zéro si l'une des expressions est non valable.
Utiliser les commandes internes break et continue (consultez COMMANDES INTERNES DE L'INTERPRÉTEUR ci-dessous) pour contrôler l'exécution de la boucle.
Développer d'abord la liste de mots suivant in, produisant une liste d'éléments et afficher l'ensemble des mots développés sur la sortie d'erreur standard, chacun précédé par un nombre. Si in mot est omis, afficher les paramètres positionnels (consultez PARAMÈTRES ci-dessous). select affiche alors l'invite PS3 et lit une ligne depuis l'entrée standard. Si la ligne est constituée d'un nombre correspondant à l'un des mots affichés, alors select affecte la valeur nom à ce mot. Si la ligne est vide, select affiche les mots et l'invite à nouveau. Si une fin de fichier (EOF) est lue, select se termine et renvoie 1. Toute autre valeur définit nom à NULL. 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 exécutée. Le code de retour de select est le code de retour de la dernière commande exécutée dans la liste ou zéro si aucune commande n'a été exécutée.
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 procédant du premier au dernier, en utilisant les règles de mise en correspondance décrites dans Motifs génériques ci-dessous. Une liste de motifs est un ensemble d'un ou plusieurs motifs séparés par |, et l'opérateur ) termine la liste de motifs. Le mot est développé en utilisant le développement du tilde, le développement des paramètres et des variables, le développement 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, le développement arithmétique, la substitution de commande, la substitution de processus et la suppression des protections. 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. Une clause est une liste de motifs et une liste associée.
Quand une correspondance est trouvée, case exécute la liste correspondante. Si l'opérateur ;; termine la clause case, la commande case se termine après la première correspondance. L'utilisation de ;& à la place de ;; fait que l'exécution se poursuit avec la liste associée à la liste suivante de motifs. L'utilisation de ;;& à la place de ;; fait que l'interpréteur teste la liste suivante de motifs de l'instruction, si elle existe, et exécute la liste associée si la correspondance réussit, poursuivant l'exécution de l'instruction de case comme si la liste de motifs n'avait pas trouvé de correspondance. Le code de retour est zéro si aucun motif ne correspond.
Sinon, c'est le code de retour de la dernière commande exécutée de la dernière liste traitée.
La liste du if est exécutée. Si son code de retour est zéro, la liste du then est exécutée. Sinon, chaque liste des elif est exécutée tour à tour et si son code de retour est zéro, la liste du then associé est exécutée et la commande se termine. Sinon, la liste du else, si présente, est exécutée. Le code de retour est celui de la dernière commande exécutée ou zéro si aucune condition n'a été satisfaite.
La commande while répète la liste liste-2 tant que la dernière commande de la liste liste-1 renvoie un code de retour de zéro. La commande until est identique à la commande while, sauf que le test est inversé : la liste-2 est exécutée tant que la dernière commande de la liste-1 renvoie un code de retour différent de zéro. Le code de retour des commandes while et until est le code de retour de la dernière commande exécutée dans la liste-2 ou zéro si aucune commande n'a été exécutée.

Coprocessus

Un coprocessus est une commande d'interpréteur précédée par le mot réservé coproc. Un coprocessus est exécuté de façon asynchrone dans un sous-interpréteur, comme si la commande se terminait par l'opérateur de contrôle &, avec un tube bidirectionnel établi entre l'interpréteur d'exécution et le coprocessus.

La syntaxe d'un coprocessus est :

coproc [NOM] commande [redirections]

Cela crée un coprocessus nommé NOM. commande peut être une commande simple ou une commande composée (voir plus haut). NOM est le nom d'une variable de l'interpréteur. Si NOM n'est pas fourni, le nom par défaut est COPROC.

Le format recommandé à utiliser pour un coprocessus est le suivant :

coproc [NOM] { commande [redirections]; }

Cette forme est préférée parce que des commandes simples font que le coprocessus est toujours appelé COPROC, et elle est plus simple à utiliser et plus complète que les autres commandes composées.

Si commande est une commande composée, NOM est optionnel. Le mot suivant coproc détermine si ce mot est interprété comme un nom de variable : il est interprété comme NOM si ce n'est pas un mot réservé qui introduit une commande composée. Si commande est une commande simple, NOM n'est pas permis ; cela est destiné à éviter une confusion entre NOM et le premier mot de la commande simple.

Quand le coprocessus est exécuté, l'interpréteur crée une variable tableau (consultez Tableaux ci-dessous) appelée NOM dans le contexte de l'interpréteur d'exécution. La sortie standard de commande est connectée par un tube à un descripteur de fichier dans l'interpréteur d'exécution, et ce descripteur de fichier est affecté à NOM[0]. L'entrée standard de commande est connectée par un tube à un descripteur de fichier dans l'interpréteur d'exécution, et ce descripteur de fichier est affecté à NOM[1]. Ce tube est établi avant toute redirection indiquée par la commande (consultez REDIRECTIONS ci-dessous). Les descripteurs de fichier peuvent être utilisés comme arguments aux commandes d'interpréteur et redirections en utilisant les développements standards de mot. Les descripteurs de fichier autres que ceux créés pour exécuter des substitutions de commande et de processus, ne sont pas disponibles dans les sous-interpréteurs.

L'identifiant du processus (PID) de l'interpréteur engendré pour exécuter le coprocessus est la valeur disponible de la variable NOM_PID. La commande interne wait peut être utilisée pour attendre que le coprocessus soit terminé.

Puisque le coprocessus est créé comme une commande asynchrone, la commande coproc se termine toujours avec succès. La valeur renvoyée par un coprocessus est le code de retour de commande.

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 :

Cela définit une fonction possédant le nomfonction 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 (consultez Commandes composées ci-dessus). Cette commande est généralement une liste de commandes entre { et }, mais peut être n'importe quelle commande décrite dans Commandes composées ci-dessus. Si le mot réservé function est utilisé, mais que les parenthèses ne sont pas fournies, les accolades sont recommandées. La commande-composée est exécutée chaque fois que nomfonction est indiqué comme nom d'une commande normale. En mode POSIX, nomfonction doit être un nom valable d'interpréteur et ne peut pas être le nom d’une des commandes internes spéciales de POSIX (« special builtins »). En mode par défaut, un nom de fonction peut être n'importe quel mot de l'interpréteur non protégé qui ne contient pas de $.

Toutes les redirections (consultez REDIRECTIONS ci-dessous) indiquées, lorsqu'une fonction est définie, sont effectuées lorsque la fonction est exécutée.

Le code de retour d'une définition de fonction est zéro, à moins qu'une erreur de syntaxe ne se produise ou qu'une fonction en lecture seule n'existe déjà avec le même nom. Lorsque la fonction est exécutée, le code de retour est celui de la dernière commande exécutée dans le corps de la fonction (consultez FONCTIONS ci-dessous).

COMMENTAIRES

Dans un interpréteur non interactif ou dans un interpréteur interactif avec l'option interactive_comments de la commande interne shopt activée (consultez COMMANDES INTERNES DE L'INTERPRÉTEUR ci-dessous), un mot commençant par # introduit un commentaire. Un mot commence au début d'une ligne, après un espace blanc non protégé ou après un opérateur. Le commentaire conduit à 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.

PROTECTIONS

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 ci-dessus 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 (consultez DÉVELOPPEMENT DE L'HISTORIQUE ci-dessous), 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 existe a quatre mécanismes de protection : le caractère de protection, les guillemets simples (« single quotes ») les guillemets doubles (« double quotes ») et les guillemets dollar simples.

Le caractère de protection est une contre-oblique (\) non protégée. Il préserve la valeur littérale du caractère qui le suit, lui retirant toute signification à l'exception du <changement de ligne>. Si un couple \<changement de ligne> apparaît et si la contre-oblique n'est pas elle-même protégée, l'ensemble \<changement de ligne> est considéré comme une continuation de ligne (c'est-à-dire qu'il est supprimé du flux 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 guillemet 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é, !. Quand l'interpréteur est en mode POSIX, le ! n'a pas de signification particulière entre des guillemets doubles, même quand 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 d'un des caractères suivants : $, `, ", \ ou <changement de ligne>. La contre-oblique précédant des caractères sans signification particulière demeure inchangée.

Un guillemet double peut être protégé entre deux guillemets doubles en étant précédé 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 (consultez PARAMÈTRES ci-dessous).

Les séquences de caractères de la forme $'chaîne' sont traitées comme une variante spéciale des guillemets simples. La séquence est développée en chaîne avec les caractères protégés par contre-oblique remplacés comme indiqué par la norme ANSI C. Les suites de protection par contre-oblique, si présentes, sont décodées comme suit :

alerte (alarme)
espace arrière
caractère de protection
saut de page (« form feed »)
saut de ligne (« new line »)
retour chariot
tabulation horizontale
tabulation verticale
\\
contre-oblique
\'
guillemet simple
\"
guillemet double
\?
point d'interrogation
le caractère 8 bits dont la valeur en octal vaut nnn (un à trois chiffres)
le caractère 8 bits dont la valeur hexadécimale est HH (un ou deux chiffres hexadécimaux)
le caractère Unicode (ISO/IEC 10646) dont la valeur hexadécimale est HHHH (un à quatre chiffres hexadécimaux)
le caractère Unicode (ISO/IEC 10646) dont la valeur hexadécimale est HHHHHHHH (un à huit chiffres hexadécimaux)
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.

Traductions de chaîne

Une chaîne entre guillemets doubles précédée d'un symbole dollar ($"chaîne") conduit à la traduction de la chaîne selon les paramètres linguistiques régionaux en vigueur. L'infrastructure de gettext parcourt la chaîne et effectue la traduction, en utilisant les variables de l'interpréteur LC_MESSAGES, TEXTDOMAINDIR et TEXTDOMAIN. Si les paramètres linguistiques régionaux actuels sont C ou POSIX, s'il n'y a pas de traduction disponible ou si la chaîne n'est pas traduite, le symbole dollar est ignoré et la chaîne est traitée comme entre guillemets doubles comme décrit ci-dessus. C'est une forme de double protection, ainsi la chaîne demeure entre guillemets doubles par défaut qu'elle soit ou non traduite et remplacée. Si l'option noexpand_translation est activée en utilisant la commande interne shopt, les chaînes traduites sont protégées par des guillemets simples au lieu de guillemets doubles. Consultez la description de shopt ci-dessous dans COMMANDES INTERNES DE L'INTERPRÉTEUR.

PARAMÈTRES

Un paramètre est une entité permettant de stocker des valeurs. Ce peut être un nom, un nombre ou un des caractères spéciaux décrits ci-dessous, dans Paramètres spéciaux. Une variable est un paramètre désigné 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 (consultez declare dans COMMANDES INTERNES DE L'INTERPRÉTEUR ci-dessous). Les commandes internes export et readonly affectent des attributs particuliers.

Un paramètre est créé si une valeur lui a été affectée. La chaîne NULL est une valeur valable. Une fois qu'une variable est définie, elle ne peut être détruite qu'en utilisant la commande interne unset (consultez COMMANDES INTERNES DE L'INTERPRÉTEUR ci-dessous).

Une variable reçoit une valeur par une affectation de la forme

nom=[valeur]

Si aucune valeur n'est indiquée, une chaîne NULL 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 (consultez DÉVELOPPEMENTS ci-dessous). Si une variable a son attribut integer positionné, alors la valeur est soumise à l'évaluation arithmétique, même si le développement $((...))) n'est pas utilisé (consultez Développement arithmétique ci-dessous). Le découpage en mots et le développement des chemins ne sont pas effectués. Les affectations peuvent également apparaître comme arguments des commandes internes suivantes : alias, declare, typeset, export, readonly et local (commandes de déclaration). En mode POSIX, ces commandes internes peuvent apparaître dans une commande après une ou plusieurs instances de la commande interne command et conserver ces propriétés d’affectation.

Dans le contexte où une affectation affecte une valeur à une variable de l'interpréteur ou à un indice de tableau, l'opérateur “+=” concatène ou additionne à la précédente valeur de la variable. Cela comprend des arguments pour les commandes de déclaration comme declare, qui acceptent des affectations. Lorsque “+=” est appliqué à une variable dont l'attribut integer (entier) a été positionné, la valeur actuelle de la variable et la valeur sont chacune évaluées comme une expression arithmétique et la somme des résultats est affectée à la valeur de la variable. La valeur actuelle est généralement une constante entière, mais peut être une expression. Lorsque “+=” est appliqué à une variable tableau en utilisant une affectation composée (consultez Tableaux ci-dessous), la valeur de la variable n'est pas détruite (comme lors de l'utilisation de “=”), et les nouvelles valeurs sont ajoutées au tableau, en commençant à l'indice maximal du tableau plus un (pour les tableaux indicés) ou ajoutées comme un couple clé/valeur supplémentaire pour un tableau associatif. 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.

L'attribut nameref peut être affecté à une variable en utilisant l'option -n des commandes internes declare et local (consultez la description des commandes declare et local ci-dessous) pour créer une nameref ou une référence vers une autre variable. Cela permet aux variables d’être manipulées indirectement. À chaque fois qu’une variable nameref est référencée, affectée, détruite ou a ses attributs modifiés (autrement qu'en utilisant ou en changeant l'attribut nameref lui-même), l'opération est en fait réalisée sur la variable indiquée par la valeur de la variable nameref. nameref est généralement utilisée dans des fonctions d’interpréteur pour référencer une variable dont le nom est passé en argument de la fonction. Par exemple, si un nom de variable est passé en premier argument à une fonction d’interpréteur, exécuter

declare -n ref=$1

dans la fonction crée une variable locale ref de nameref dont la valeur est le nom de la variable passée en premier argument. Les références et affectations de ref et les modifications de ses attributs sont traitées comme des références, affectations et modifications d'attribut sur la variable dont le nom a été passé par $1. Si la variable de contrôle dans une boucle for a l'attribut nameref, la liste de mots peut être une liste de variables d’interpréteur et une référence de nom est établie pour chaque mot de la liste tour à tour, lorsque la boucle est exécutée. L'attribut nameref ne peut pas être donné aux variables de type tableau. Cependant, les variables nameref peuvent référencer des variables de type tableau et des variables de type tableau indicé. nameref peut être détruite en utilisant l'option -n de la commande interne unset. Sinon, si unset est exécuté avec le nom d’une variable nameref en argument, la variable référencée par la variable nameref est détruite.

Lorsque l'interpréteur de commande démarre, il lit son environnement et crée une variable d'interpréteur pour chaque variable d'environnement qui porte un nom valable, comme décrit ci-dessous (voir ENVIRONNEMENT).

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 à partir des arguments de l'interpréteur lors de son invocation. Ils peuvent être affectés à nouveau avec la commande interne set. Les paramètres positionnels ne peuvent pas être affectés par des instructions d'affectation. Ils sont temporairement remplacés lors de l'exécution d'une fonction de l'interpréteur (consultez FONCTIONS ci-dessous).

Un paramètre positionnel constitué de plusieurs chiffres doit être encadré par des accolades lors de son développement (consultez DÉVELOPPEMENTS ci-dessous). Sans accolades, un chiffre suivant $ ne peut faire référence qu'à un des neuf paramètres positionnels ($1-$9), ou au paramètre spécial $0 (voir le paragraphe suivant).

Paramètres spéciaux

L'interpréteur traite plusieurs paramètres spécifiquement. Ces paramètres peuvent uniquement être référencés, il n'est pas permis de leur affecter une valeur. Les paramètres spéciaux sont indiqués par un des caractères suivants.

*
($*) Se développe en l'ensemble des paramètres positionnels, en commençant par le premier. Quand le développement n’est pas entre guillemets doubles, tous les paramètres positionnels se développent en mots séparés. Dans les contextes où les développements de mots sont réalisés, ces mots sont soumis à d’autres découpages en mots et développements de chemin. 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 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 NULL, les paramètres sont accolés sans séparateurs.
@
($@) Se développe en l'ensemble des paramètres positionnels, en commençant par le premier. Dans les contextes où le découpage en mots est réalisé, chaque paramètre positionnel se développe en un mot séparé ; si ces mots ne sont pas entre des guillemets doubles, ils sont sujets au découpage en mots. Dans les contextes où il n'y a pas de découpage en mots, tels que la partie valeur d'une instruction d'affectation, chaque paramètre positionnel se développe en un mot distinct séparé par des espaces. 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).
#
($#) Se développe au nombre de paramètres positionnels, en base décimale.
?
($?) Se développe au code de retour de la dernière commande exécutée.
-
($-) Se développe en indicateurs des options actuelles indiquées durant l'appel par la commande interne set ou celles définies par l'interpréteur lui-même (comme avec l'option -i).
$
($$) Se développe en PID de l'interpréteur. Dans un sous-interpréteur, il se transforme en PID de l'interpréteur parent et non pas du sous-interpréteur.
!
($!) Se développe en PID de la dernière tâche placée en arrière-plan, soit exécutée comme une commande asynchrone, soit en utilisant la commande interne bg (consultez CONTRÔLE DES TÂCHES ci-dessous).
0
($0) Se développe en 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 du fichier utilisé pour appeler bash, comme indiqué par l'argument zéro.

Variables de l'interpréteur

L'interpréteur définit les variables suivantes :

_
($_, un tiret bas) Cela a plusieurs significations selon le contexte. Au lancement de l'interpréteur, _ contient le chemin d'accès 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. Il se développe ensuite en dernier argument de la commande simple précédente exécutée au premier plan, après développement. Il est défini également au chemin d'accès complet utilisé pour appeler chaque commande exécutée et se retrouve dans l'environnement exporté vers cette commande. Lors de la vérification de l'arrivée de courrier, le développement de $_ est le nom du fichier de courrier en cours de consultation.
Se développe en nom du fichier complet utilisé pour appeler cette instance de bash.
Liste des options activées de l'interpréteur, séparées par des deux-points « : ». Chaque mot de la liste est un argument correct pour l'option -s de la commande interne shopt (consultez COMMANDES INTERNES DE L'INTERPRÉTEUR ci-dessous). Les options apparaissant dans BASHOPTS sont celles indiquées comme actives par shopt. Si cette variable est dans l'environnement au lancement de bash, l'interpréteur active chaque option de la liste avant de lire les fichiers d’initialisation. Si cette variable est exportée, les interpréteurs enfant activeront chaque option de la liste. Cette variable est en lecture seule.
Se transforme en PID du processus de l'interpréteur bash actuel. Diffère de $$ sous certaines conditions, comme dans les sous-interpréteurs ne nécessitant pas que bash soit réinitialisé. Les affectations à BASHPID n'ont pas d'effet. Si BASHPID est détruite, elle perd ses propriétés spéciales, même si elle est recréée par la suite.
Une variable de type tableau associatif dont les éléments correspondent à une liste interne d'alias comme celle gérée par la commande interne alias. Les éléments ajoutés à ce tableau apparaissent dans la liste d'alias ; cependant, la destruction d'éléments du tableau ne supprime pas actuellement les alias de la liste d'alias. Si BASH_ALIASES est détruite, elle perd ses propriétés spéciales, même si elle est recréée par la suite.
Une variable de type tableau contenant le nombre de paramètres de chaque trame de la pile d'exécution d'appels de l'interpréteur bash actuel. Le nombre de paramètres du sous-programme actuel (fonction de l'interpréteur ou du 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 (consultez ci-dessous la description de l'option extdebug de la commande interne shopt). La configuration de extdebug après que l'interpréteur a démarré l'exécution d'un script, ou le référencement de cette variable quand extdebug n'existe pas, peut provoquer une incohérence des valeurs. Les affectations à BASH_ARGC n'ont aucun effet et la variable ne peut pas être détruite.
Une variable de type tableau contenant tous les paramètres de la pile d'exécution d'appels de l'interpréteur bash actuel. 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é, l'interpréteur place les paramètres fournis dans BASH_ARGV. BASH_ARGV est créé uniquement dans le mode de traçage étendu (consultez ci-dessous la description de l'option extdebug de la commande interne shopt). La configuration de extdebug après que l'interpréteur a démarré l'exécution d'un script, ou le référencement de cette variable quand extdebug n'existe pas peut provoquer une incohérence des valeurs. Les affectations à BASH_ARGV n'ont aucun effet et la variable ne peut pas être détruite.
Quand elle est référencée, cette variable développe le nom de l'interpréteur ou du script de l'interpréteur (identique à $0 ; voir la description du paramètre spécial 0 ci-dessus). L'affectation d'une valeur à BASH_ARGV0 définit $0 à cette valeur. Si BASH_ARGV0 est détruite, elle perd ses propriétés spéciales, même si elle est recréée par la suite.
Une variable de type tableau associatif dont les éléments correspondent à la table de hachage interne de commandes comme celle gérée par la commande interne hash. Ajouter des éléments à ce tableau les fait apparaître dans la table de hachage ; cependant, la destruction d'éléments du tableau ne retire pas actuellement des noms de commandes de la table de hachage. Si BASH_CMDS est détruite, elle perd ses propriétés spéciales, même si elle est recréée par la suite.
Développe 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. Si BASH_COMMAND est détruite, elle perd ses propriétés spéciales, même si elle est recréée par la suite.
L'argument de commande de l'option d'appel -c.
Une variable de type tableau dont les éléments sont les numéros de ligne des fichiers source où chaque élément correspondant de FUNCNAME a été invoqué. ${BASH_LINENO[$i]} est le numéro de la ligne dans le fichier source (${BASH_SOURCE[$i+1]}) où ${FUNCNAME[$i]} a été appelé (ou ${BASH_LINENO[$i-1]} si consulté depuis une autre fonction de l'interpréteur). Utilisez LINENO pour obtenir le numéro de ligne actuel. Les affectations à LINENO n'ont aucun effet et la variable ne peut pas être détruite.
Liste des répertoires, séparés par des deux-points « : », que la commande enable consulte lorsqu'elle cherche les commandes internes chargeables dynamiquement.
À chaque fois que cette variable est consultée, son développement est la valeur renvoyée par l'horloge monotone du système, s'il y en a une de disponible. S'il n'y en a pas, c'est équivalent à EPOCHSECONDS. Si BASH_MONOSECONDS est détruite, elle perd ses propriétés spéciales, même si elle est recréée par la suite.
Une variable de type tableau dont les éléments sont affectés par 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.
Une variable de type tableau dont les éléments sont les noms des fichiers source où les noms des fonctions d'interpréteur correspondants à la variable de type tableau FUNCNAME sont définis. La fonction d'interpréteur ${FUNCNAME[$i]} est définie dans le fichier ${BASH_SOURCE[$i]} et appelée depuis ${BASH_SOURCE[$i+1]}. Les affectations à BASH_SOURCE n'ont aucun effet et la variable ne peut pas être détruite.
Incrémentée dans tous les sous-interpréteurs et environnements de sous-interpréteur quand l'interpréteur commence à s’exécuter dans cet environnement. La valeur initiale est 0. Si BASH_COMMAND est détruite, elle perd ses propriétés spéciales, même si elle est recréée par la suite.
Définie au numéro du signal correspondant à l'action de capture exécutée pendant son exécution. Consultez la description de trap dans COMMANDES INTERNES DE L'INTERPRÉTEUR ci-dessous) pour des informations sur les numéros de signal et l'exécution de captures.
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 :

Le numéro majeur de la version (release).
Le numéro mineur de la version (version).
Le niveau de correctif.
Le numéro de compilation.
L'état cette version (par exemple beta).
La valeur de MACHTYPE.
Se développe en une chaîne décrivant le numéro de version de cette instance de bash (par exemple 5.2.37(3)-release).
Un indice dans ${COMP_WORDS} du mot contenant la position actuelle du curseur. Cette variable n'est disponible que dans les fonctions de l'interpréteur appelées par les outils de complètement programmable (consultez Complètement programmable ci-dessous).
La touche (ou la touche finale d'une séquence de touches) utilisée pour appeler la fonction de complètement actuelle. Cette variable n'est disponible que dans les fonctions de l'interpréteur appelées par les outils de complètement programmable (consultez Complètement programmable ci-dessous).
La ligne de commande actuelle. Cette variable n'est disponible que dans les fonctions de l'interpréteur appelées par les outils de complètement programmable (consultez Complètement programmable ci-dessous).
L'indice de la position actuelle du curseur relatif au début de la commande actuelle. Si la position actuelle du curseur est à la fin de la commande actuelle, 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 programmable (consultez Complètement programmable ci-dessous).
Configurée à une valeur entière correspondant au type de complètement essayé qui a provoqué l'appel d'une fonction de complètement : TAB pour un complètement normal, ? pour l'affichage des complètements après des tabulations successives, ! pour l'affichage des alternatives de complètement de mot partiel, @ pour afficher les complètements si le mot n'est pas modifié, ou % pour le complètement de menu. 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 programmable (consultez Complètement programmable ci-dessous).
Le jeu de caractères que la bibliothèque readline considère comme des séparateurs de mots lors du complètement de mot. Si COMP_WORDBREAKS est détruite, elle perd ses propriétés spéciales, même si elle est recréée par la suite.
Une variable de type tableau (consultez Tableaux ci-dessous) consistant en mots individuels de la ligne de commande actuelle. La ligne est découpée en mots comme readline la découperait en utilisant COMP_WORDBREAKS tel que décrit ci-dessus. Cette variable n'est disponible que dans les fonctions de l'interpréteur appelées par les outils de complètement programmable (consultez Complètement programmable ci-dessous).
Une variable de type tableau (consultez Tableaux ci-dessous) créée pour représenter les descripteurs de fichier pour les sorties depuis et les entrées vers un coprocessus non nommé (consultez Coprocessus ci-dessus).
Une variable de type tableau (consultez Tableaux ci-dessous) représentant le contenu actuel 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ées 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 modifie pas le répertoire actuel. Si DIRSTACK est détruite, elle perd ses propriétés spéciales, même si elle est recréée par la suite.
À chaque fois que ce paramètre est consulté, il se développe en nombre de secondes écoulées depuis l'Epoch Unix (consultez time(3)) comme valeur en virgule flottante avec une granularité d'une microseconde. Les affectations à EPOCHREALTIME sont ignorées. Si EPOCHREALTIME est détruite, elle perd ses propriétés spéciales, même si elle est recréée par la suite.
À chaque fois que ce paramètre est consulté, il se développe en nombre de secondes écoulées depuis l'Epoch Unix (consultez time(3)). Les affectations à EPOCHSECONDS sont ignorées. Si EPOCHSECONDS est détruite, elle perd ses propriétés spéciales, même si elle est recréée par la suite.
Contient l'UID effectif de l'utilisateur, initialisé au démarrage de l'interpréteur. Cette variable est en lecture seule.
Une variable de type tableau contenant le nom de toutes les fonctions de l'interpréteur actuellement dans la pile d'exécution d'appels. L'élément d'indice 0 est le nom de l'une des fonctions en cours d'exécution dans l'interpréteur. L'élément le plus bas (celui avec l'indice le plus grand) 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. Si FUNCNAME est détruite, elle perd ses propriétés spéciales, même si elle est recréée par la suite.
Cette variable peut être utilisée avec BASH_LINENO et BASH_SOURCE. Chaque élément de FUNCNAME a des éléments correspondant dans BASH_LINENO et BASH_SOURCE pour décrire la pile d'appels. Par exemple, ${FUNCNAME[$i]} a été appelé depuis le fichier ${BASH_SOURCE[$i+1]} à la ligne numéro ${BASH_LINENO[$i]}. La commande interne caller affiche la pile d'appel actuelle utilisant ces renseignements.
Une variable de type tableau contenant la liste des groupes dont l'utilisateur est membre. Les affectations de GROUPS n'ont aucun effet. Si GROUPS est détruite, elle perd ses propriétés spéciales, même si elle est recréée par la suite.
Le numéro d'historique, ou l'indice dans la file d'historique, de la commande en cours. Les affectations de HISTCMD n'ont aucun effet. Si HISTCMD est détruite, elle perd ses propriétés spéciales, même si elle est recréée par la suite.
Automatiquement configurée au nom de la machine actuelle.
Automatiquement configurée en chaîne décrivant de façon unique le type de machine sur laquelle bash s'exécute. La valeur par défaut dépend du système.
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.
Automatiquement configurée en 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.
Une variable de type tableau (consultez Tableaux ci-dessous) créée pour représenter le texte lu par la commande interne mapfile si aucun nom de variable n'a été fourni.
Le répertoire de travail précédent tel que configuré par la commande cd.
La valeur du dernier argument d'option traité par la commande interne getopts (consultez COMMANDES INTERNES DE L'INTERPRÉTEUR ci-dessous).
L'indice du prochain argument à traiter par la commande interne getopts (consultez COMMANDES INTERNES DE L'INTERPRÉTEUR ci-dessous).
Automatiquement configurée en chaîne décrivant le système d'exploitation sur lequel bash s'exécute. La valeur par défaut dépend du système.
Une variable de type tableau (consultez Tableaux ci-dessous) contenant une liste des codes de retour des commandes exécutées dans le pipeline exécuté le plus récemment au premier plan qui peut éventuellement contenir une seule commande (consultez GRAMMAIRE DE L'INTERPRÉTEUR ci-dessus). bash définit PIPESTATUS après l'exécution de pipelines multi-éléments, de pipelines synchronisés et inversés, de commandes simples, de sous-interpréteurs avec l'opérateur (, les commandes composées [[ et ((, et après des conditions d'erreur qui entraînent l'arrêt de l'exécution de commandes par l'interpréteur.
L'identifiant du processus parent de l'interpréteur. Cette variable est en lecture seule.
Le répertoire de travail actuel tel que configuré par la commande cd.
À chaque fois que ce paramètre est consulté, son développement est un entier aléatoire entre 0 et 32767. L'affectation d'une valeur à RANDOM initialise (ensemence) la suite de nombres aléatoires. Ensemencer le générateur de nombres aléatoires avec la même valeur constante produit la même suite de valeurs. Si RANDOM est détruite, elle perd ses propriétés spéciales, même si elle est recréée par la suite.
Tout argument numérique donné à une commande readline qui a été définie en utilisant “bind -x” (consultez COMMANDES INTERNES DE L'INTERPRÉTEUR ci-dessous) quand il a été invoqué.
Le contenu du tampon de ligne readline, pour utiliser avec “bind -x” (consultez COMMANDES INTERNES DE L'INTERPRÉTEUR ci-dessous).
La position de la marque (point d'insertion enregistré) dans le tampon de ligne readline, pour utiliser avec “bind -x” (consultez COMMANDES INTERNES DE L'INTERPRÉTEUR ci-dessous). Les caractères entre le point d'insertion et la marque sont souvent appelés la zone.
La position du point d'insertion dans le tampon de ligne readline, pour utiliser avec “bind -x” (consultez COMMANDES INTERNES DE L'INTERPRÉTEUR ci-dessous).
Définie à ligne de saisie lue par la commande interne read lorsqu'aucun argument n'a été fourni.
À chaque fois que ce paramètre est consulté, il se développe en nombre de secondes écoulées depuis le lancement de l'interpréteur. Si une valeur est affectée à SECONDS, la valeur renvoyée lors d’une consultation ultérieure est le temps en seconde écoulé depuis l'affectation, ajouté à la valeur affectée. Le nombre de secondes entre le moment du lancement de l'interpréteur et l'heure actuelle est toujours déterminé en interrogeant l'horloge système avec une résolution d'une seconde. Si SECONDS est détruite, elle perd ses propriétés spéciales, même si elle est recréée par la suite.
Liste des options activées de l'interpréteur, séparées par des deux-points « : ». Chaque mot de la liste est un argument correct pour l'option -o de la commande interne set (consultez COMMANDES INTERNES DE L'INTERPRÉTEUR ci-dessous). Les options apparaissant dans SHELLOPTS sont celles indiquées comme actives par set -o. Si cette variable est dans l'environnement au lancement de bash, l'interpréteur active chaque option de la liste avant de lire les fichiers d’initialisation. Si cette variable est exportée, les interpréteurs enfant activeront chaque option de la liste. Cette variable est en lecture seule.
Incrémenté de 1 à chaque appel d'une instance de bash.
Chaque fois qu'elle est consultée, cette variable génère un nombre pseudo-aléatoire de 32 bits. Le générateur de nombres aléatoires n'est pas linéaire sur les systèmes qui prennent en charge /dev/urandom ou arc4random(3), aussi chaque nombre renvoyé n'a aucune relation avec les nombres précédents. Le générateur de nombre aléatoire ne peut pas être ensemencé, aussi les affectations à cette variable n'ont aucun effet. Si SRANDOM est détruite, elle perd ses propriétés spéciales, même si elle est recréée par la suite.
Contient l'UID de l'utilisateur actuel, initialisé au démarrage de l'interpréteur. Cette variable est en lecture seule.

L'interpréteur utilise les variables suivantes. Dans certains cas, bash affecte des valeurs par défaut aux variables ; ces cas sont décrits ci-dessous.

Cette valeur est utilisée pour définir le niveau de compatibilité de l'interpréteur. Consultez MODE DE COMPATIBILITÉ DE L'INTERPRÉTEUR ci-dessous pour une description des différents niveaux de compatibilité et leurs conséquences. La valeur peut être un nombre décimal (par exemple 4.2) ou entier (par exemple 42) correspondant au niveau de compatibilité voulu. Si BASH_COMPAT est détruite ou définie comme une chaîne vide, le niveau de compatibilité est défini à la valeur par défaut de la version actuelle. Si BASH_COMPAT est définie à une valeur de niveau de compatibilité impossible, l'interpréteur affiche un message d’erreur et définit le niveau de compatibilité à la valeur par défaut de la version actuelle. Un sous-ensemble des valeurs possibles correspond aux niveaux de compatibilité décrits ci-dessous dans MODE DE COMPATIBILITÉ DE L'INTERPRÉTEUR. Par exemple, 4.2 et 42 sont des valeurs possibles qui correspondent à l'option compat42 de shopt et définissent le niveau de compatibilité à 42. La version actuelle est aussi une valeur possible.
Si ce paramètre existe lorsque bash exécute un script, sa valeur développée est considérée comme un nom de fichier contenant les commandes d'initialisation de l'interpréteur avant qu'il lise et exécute les commandes du script. 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 nom de fichier résultant.
Si configurée à une valeur entière correspondant à un descripteur de fichier correct, bash écrit la trace de sortie si “set -x” est activé vers ce descripteur de fichier, à la place de la sortie d'erreur standard. Le descripteur de fichier est fermé quand BASH_XTRACEFD est détruite ou qu'une nouvelle valeur lui est affectée. Détruire BASH_XTRACEFD ou lui affecter la chaîne vide fait que la trace de sortie est envoyée vers la sortie d'erreur standard. Remarquez que configurer BASH_XTRACEFD à 2 (le descripteur de fichier de la sortie d'erreur standard) puis la détruire revient à fermer la sortie d'erreur standard.
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 où l'interpréteur cherche les répertoires spécifiés comme arguments de la commande cd. Un exemple de valeur est “.:~:/usr”.
Définir le nombre de valeurs d’état de sortie des enfants dont l'interpréteur doit se souvenir. bash ne permettra pas à cette valeur d’être inférieure à un minimum imposé par POSIX , ni d’être supérieure à une valeur maximale (8192 pour l'instant). La valeur minimale dépend du système.
Utilisée par la commande composée select pour déterminer la largeur du terminal lors de l'affichage des listes de sélection. Automatiquement configurée si l'option checkwinsize est activée ou dans un interpréteur interactif à la réception d'un signal SIGWINCH.
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 programmable (consultez Complètement programmable ci-dessous). Chaque élément du tableau contient un complètement possible.
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 d'Emacs et désactive l'édition de ligne.
Développé et exécuté de façon similaire à BASH_ENV (consultez APPEL ci-dessus) quand l'interpréteur interactif est invoqué en mode POSIX.
Une liste, séparée par des deux-points « : », de motifs de l'interpréteur (voir Motifs génériques) définissant l'ensemble de noms de fichier à ignorer par la commande de recherche utilisant PATH. Les fichiers dont les noms de chemin complets correspondent à un de ces motifs ne sont pas considérés comme des fichiers exécutables en vue du complètement et de l'exécution de commande au moyen d'une recherche dans PATH. Cela n'affecte pas le comportement des commandes [, test et [[. Les noms de chemin complets dans la table de hachage des commandes ne sont pas sujets à EXECIGNORE. Utiliser cette variable pour ignorer des fichiers de bibliothèque partagée dont le bit exécutable est présent, mais qui ne sont pas des fichiers exécutables. La correspondance de motif respecte la configuration de l'option d'interpréteur extglob.
L'éditeur par défaut utilisé par la commande interne fc.
Une liste de suffixes, séparés par des deux-points « : », que bash ignorera lors du complètement des noms de fichier (consultez READLINE ci-dessous). 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 correspondants 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).
Si configurée à une valeur numérique strictement positive, cela définit le niveau maximal d'imbrication de fonctions. Les invocations de fonctions qui dépassent ce niveau d'imbrication forcent la commande actuelle à abandonner.
Une liste de motifs séparés par des deux-points « : », définissant l'ensemble des noms de fichier à ignorer lors du développement des chemins. Si un nom de fichier correspondant à un des motifs de développement des chemins correspond également à un des motifs dans GLOBIGNORE, il est supprimé de la liste des correspondances. La correspondance de motif respecte la configuration de l'option d'interpréteur extglob.
Contrôle la manière dont les résultats de développement des chemins sont triés. La valeur de cette variable spécifie le critère et l'ordre de tri des résultats de développement des chemins. Si cette variable est détruite ou définie à une chaîne NULL, le développement des chemins utilise le comportement historique en triant par nom, en ordre lexicographique ascendant tel que déterminé par la variable d'interpréteur LC_COLLATE.
Si elle existe, la valeur valable commence par un + facultatif qui est ignoré, ou un - qui inverse l'ordre de tri d'ascendant à descendant, suivi d'un indicateur de tri. Les indicateurs de tri valables sont name, numeric, size, mtime, atime, ctime et blocks qui trient les fichiers respectivement par nom, noms par ordre numérique plutôt que par ordre lexicographique, par taille de fichier, par heure de modification, par heure d'accès, par heure de modification d'inœud ou par nombre de blocs. Si deux clés de tri autres que le nom sont jugées égales (par exemple, si deux fichiers sont de même taille), le tri utilise le nom comme clé de tri secondaire.
Par exemple, une valeur de -mtime trie les résultats en ordre descendant par heure de modification (les plus récents d'abord).
L'indicateur numeric traite les noms composés uniquement de chiffres comme des nombres et les trie en utilisant leur valeur numérique (ainsi “2” est trié avant “10”, par exemple). Lors de l'utilisation de numeric, les noms contenant des caractères non numériques sont triés après tous les noms entièrement numériques et sont triés par nom suivant le comportement traditionnel.
Un indicateur de tri nosort désactive totalement le tri ; bash renvoie les résultats dans l'ordre où ils sont lus à partir du système de fichiers, ignorant un - de tête.
Si l'indicateur de tri est absent, la valeur par défaut est name, ainsi une valeur de + est équivalente à la chaîne NULL et une valeur de - trie par nom en ordre descendant. Une valeur nom valable restaure le comportement de tri historique.
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 actuelle 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 valable, toutes les lignes lues par l'analyseur de l'interpréteur seront sauvegardées dans la file d'historique, selon la valeur de HISTIGNORE. Si la première ligne d'une commande composée multiligne a été sauvegardée, la seconde ligne et les suivantes ne sont pas testées et sont ajoutées dans l'historique indépendamment de la valeur de HISTCONTROL. Si la première n'a pas été sauvegardée, la seconde ligne de la commande et les suivantes ne le sont pas non plus.
Le nom du fichier dans lequel l'historique des commandes est sauvegardé (consultez HISTORIQUE ci-dessous). Par défaut, bash assigne la valeur de ~/.bash_history. Si HISTFILE n'est pas défini ou NULL, l'interpréteur ne sauvegarde pas l'historique des commandes lorsqu'il se termine.
Le nombre maximal de lignes contenues dans le fichier d'historique. Quand cette variable contient une valeur, le fichier d’historique est tronqué, si besoin, pour ne pas contenir plus que le nombre d'entrées d'historique qui ne dépasse pas ce nombre de lignes en enlevant les entrées les plus anciennes. Si le fichier d'historique contient des entrées multilignes, le fichier d'historique peut contenir plus de lignes que ce maximum pour éviter de conserver des entrées d'historique partielles. Ce fichier est aussi tronqué à cette taille après son écriture quand un interpréteur se termine ou par la commande interne history. Si la valeur est 0, le fichier d’historique est tronqué à une taille nulle. Les valeurs non numériques ou négatives empêchent la troncature. L'interpréteur définit la valeur par défaut à la valeur de HISTSIZE après avoir lu tous les fichiers d’initialisation.
Une liste de motifs, séparés par des deux-points « : », déterminant quelles lignes de commande doivent être sauvegardées sur la liste d'historique. Si une ligne de commande correspond à un des motifs dans la valeur de HISTIGNORE, elle n'est pas sauvegardée sur la liste d'historique. Chaque motif est accroché au début de la ligne et doit correspondre à la ligne complète (bash n'ajoute pas implicitement un “*”). Chaque motif est comparé à chaque ligne après application des vérifications spécifiées par HISTCONTROL. En plus des caractères correspondant aux motifs génériques usuels de l'interpréteur, “&” correspond à la ligne précédente de l'historique. Une contre-oblique protège le “&”; la contre-oblique est supprimée avant de tenter une comparaison. Si la première d'une commande composée multiligne a été sauvegardée, la seconde ligne et les suivantes ne sont pas testées et sont ajoutées dans l'historique indépendamment de la valeur de HISTIGNORE. Si la première n'a pas été sauvegardée, la seconde ligne de la commande et les suivantes ne le sont pas non plus. La correspondance de motif respecte la configuration de l'option d'interpréteur extglob.
HISTIGNORE inclut certaines des fonctions de HISTCONTROL. Un motif de “&” est identique à “ignoredups”, et un motif de “[ ]*” est identique à “ignorespace”. La combinaison de ces deux motifs séparés par un deux-points fournit la fonctionnalité de “ignoreboth”.
Le nombre de commandes à mémoriser dans l'historique (consultez HISTORIQUE ci-dessous). Si la valeur est 0, les commandes ne sont pas sauvegardées dans la file d’historique. Les valeurs négatives permettent de sauvegarder toutes les commandes dans la file d’historique (sans limite). l'interpréteur définit la valeur par défaut à 500 après avoir lu tous les fichiers d’initialisation.
Si cette variable existe et n'est pas NULL, 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é par la commande interne history. Si cette variable existe, l'interpréteur écrit les horodatages dans le fichier d'historique afin qu'ils soient conservés au fur et à mesure des sessions de l'interpréteur. Cette écriture utilise le caractère de commentaire d'historique pour distinguer l'horodatage des autres lignes de l'historique.
Le répertoire personnel (home) de l'utilisateur actuel ; 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.
Contient le nom d'un fichier ayant le même format que /etc/hosts qui doit être lu lorsque l'interpréteur a besoin de compléter un nom de machine. La liste des complètements possibles de noms de machine peut être modifié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 à la liste existante le contenu du nouveau fichier. Si HOSTFILE existe mais est vide, ou désigne un fichier non accessible en lecture, bash essaie de lire /etc/hosts pour obtenir la liste des complètements de nom de machine possibles. Lorsque HOSTFILE est détruite, bash efface la liste des noms de machine.
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. Le découpage en mots est décrit dans DÉVELOPPEMENTS ci-dessous. La valeur par défaut est “<space><tab><newline>”.
Commande le comportement d'un interpréteur interactif à la réception d'un caractère EOF (fin de fichier) comme unique saisie. Si elle existe, la valeur est le nombre de caractères EOF consécutifs qui doivent être saisis comme premiers caractères sur une ligne de saisie avant que bash ne termine. Si la variable est définie 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'est pas définie, EOF signifie la fin de la saisie pour l'interpréteur.
Le nom du fichier d’initialisation pour readline, outrepassant le fichier par défaut ~/.inputrc (consultez READLINE ci-dessous).
Si cette variable apparaît dans l'environnement quand le script démarre, bash considère qu'il s'exécute dans un tampon d'interpréteur d'Emacs et peut désactiver l'édition de ligne selon la valeur de TERM.
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_.
Cette variable outrepasse LANG et toute autre variable LC_ indiquant une catégorie de paramètres linguistiques régionaux.
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 d’intervalle, des classes d'équivalences et des suites de collations dans le développement des chemins et la correspondance de motif.
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 la correspondance de motif.
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 $.
Cette variable détermine le paramètre linguistique régional utilisé pour formater les nombres.
Cette variable détermine le paramètre linguistique régional utilisé pour le formatage des données et de l'heure.
Utilisée par la commande composée select pour déterminer la taille des colonnes lors de l'affichage des listes de sélection. Automatiquement configurée si l'option checkwinsize est activée ou dans un interpréteur interactif à la réception d'un signal SIGWINCH.
Si la valeur correspond à un nom de fichier ou de répertoire et si la variable MAILPATH est inexistante, bash informe l'utilisateur de l'arrivée de courriels dans le fichier indiqué ou le répertoire au format Maildir.
Indique la périodicité (en seconde) à laquelle bash vérifie si un nouveau courriel est arrivé. La valeur par défaut est 60 secondes. Lorsque le délai est écoulé, l'interpréteur vérifie la présence d'un courriel électronique avant d'afficher son invite de base. Si cette variable est inexistante, ou contient une valeur strictement négative, l'interpréteur désactive la vérification du courrier.
Une liste de noms de fichier séparés par des deux-points « : », dans laquelle on vérifiera l'arrivée de courriels. Le message à afficher lors de la réception d'un courriel dans un fichier particulier peut être spécifié en séparant le nom du fichier du message par un “?”. Lorsqu'il est utilisé dans le texte du message, le développement de $_ est le nom du fichier de courrier actuel. Par exemple :

MAILPATH='/var/mail/bfox?"Vous avez du courrier":~/shell-mail?"$_ a du courrier !"'

bash peut être configuré pour fournir une valeur par défaut pour cette variable (il n'y a pas de valeur par défaut), mais l'emplacement du fichier de boîte à lettres de l'utilisateur dépend du système (par exemple /var/mail/$USER).

Si configurée à la valeur 1, bash affiche les messages d'erreur générés par la commande interne getopts (consultez COMMANDES INTERNES DE L'INTERPRÉTEUR ci-dessous). OPTERR est initialisée avec la valeur 1 à chaque appel de l'interpréteur ou à l'exécution d'un script.
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 laquelle l'interpréteur recherche les commandes (consultez EXÉCUTION DES COMMANDES ci-dessous). Un nom de répertoire de taille nulle (NULL) dans la valeur de PATH désigne le répertoire actuel. Un nom de répertoire NULL peut apparaître sous la forme de 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/local/bin:/usr/local/sbin:.if  0<78n .br
/usr/bin:/usr/sbin:/bin:/sbin
Si cette variable existe dans l'environnement lorsque bash démarre, l'interpréteur passe en mode POSIX avant de lire les fichiers d’initialisation 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. Quand l'interpréteur passe en mode POSIX, il configure cette variable si elle ne l'a pas déjà été.
Si cette variable existe et est un tableau, la valeur de chaque élément existant est exécutée comme commande préalablement à l'affichage de chaque invite de base. Si elle existe mais n'est pas une variable de type tableau, sa valeur est utilisée comme commande à exécuter à la place.
Si elle contient un nombre supérieur à zéro, cette valeur est utilisée comme nombre de répertoires finaux à conserver lors du développement des protections de chaîne d'invite \w et \W (consultez INVITES ci-dessous). Les caractères supprimés sont remplacés par des points de suspension.
La valeur de ce paramètre est développée (consultez INVITES ci-dessous) puis affichée par les interpréteurs interactifs après la lecture d'une commande et avant son exécution.
La valeur de ce paramètre est développée puis utilisée comme chaîne d'invite de base (consultez INVITES ci-dessous). La valeur par défaut est “\s-\v\$ ”.
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 “> ”.
La valeur de ce paramètre est utilisée comme invite de la commande select (consultez GRAMMAIRE DE L'INTERPRÉTEUR ci-dessus).
La valeur de ce paramètre est développée comme PS1 puis affichée avant chaque commande affichée par bash 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 “+ ”.
Cette variable développe le chemin d'accès complet à l'interpréteur de commandes. Si elle est 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 actuel.
La valeur de ce paramètre est utilisée en tant que chaîne de format indiquant comment les informations de temps doivent être affichées pour les pipelines préfixés par le mot réservé time. Le caractère % introduit une suite de caractères de protection qui est développée en valeur de temps ou autre information. Les suites de caractères de protection et leurs significations sont les suivantes ; les crochets indiquent les parties facultatives.

%%
Un % seul (non interprété).
%[p][l]R
Le temps écoulé en seconde.
%[p][l]U
Le temps processeur écoulé en mode utilisateur en seconde.
%[p][l]S
Le temps processeur écoulé en mode système en seconde.
%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 à l'affichage de nombres entiers. time affiche au plus six chiffres après la virgule ; toute valeur de p supérieure à 6 sera modifiée en 6. Si p n'est pas précisé, time affiche trois chiffres après la virgule.
Le l facultatif indique 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 agit comme si elle avait la valeur $'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS'. Si la valeur est NULL, bash n'affiche aucune information de chronométrage. Un caractère final de changement de ligne est ajouté quand la chaîne de format est affichée.
Si définie à une valeur strictement positive, la commande interne read utilise la valeur comme délai par défaut. La commande select se 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 une durée en seconde à attendre une ligne de saisie après avoir affiché l'invite de base. bash se termine après avoir attendu pendant ce temps en seconde si aucune saisie de ligne complète n'est arrivée.
Si existante, bash utilise sa valeur comme nom de répertoire dans lequel bash crée les fichiers temporaires nécessaires au fonctionnement de l'interpréteur.
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 ou contiennent le mot, 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 configurée à la valeur exact, la chaîne fournie doit correspondre exactement au nom d'une tâche suspendue ; si configurée à 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 %? (consultez CONTRÔLE DES TÂCHES ci-dessous). Si configurée à toute autre valeur (par exemple, préfixe), le mot fourni doit être le préfixe du nom d'une tâche suspendue ; cela fournit une fonctionnalité analogue à l'identificateur de tâche %chaîne.
Les deux ou trois caractères commandant le développement de l'historique, la substitution rapide et le découpage en lexèmes (consultez DÉVELOPPEMENT DE L'HISTORIQUE ci-dessous), Le premier caractère est le caractère de développement de l'historique, celui qui indique le début d'un développement d'historique, normalement “!”. Le second caractère est le caractère de substitution rapide, normalement “^”. Lorsqu'il apparaît comme premier caractère de la ligne, la substitution d'historique répète la commande précédente, remplaçant une chaîne par une autre. Le troisième caractère facultatif est le caractère commentaire d'historique, normalement “#”, qui indique que le reste de la ligne est un commentaire quand il apparaît comme premier caractère d'un mot. Le caractère de commentaire d'historique désactive la substitution d'historique pour les mots restant sur la ligne. Il ne fait pas nécessairement que l'analyseur de l'interpréteur traite le reste de la ligne comme un commentaire.

Tableaux

bash fournit des variables de type tableau indicé ou associatif à une dimension. Toute variable peut être utilisée comme tableau indicé ; la commande interne declare déclare explicitement un tableau. Il n'y a pas de limitation maximale à la taille d'un tableau, ni d'obligation à indicer les éléments ou les affecter de façon contiguë. Les tableaux indicés sont référencés avec des expressions arithmétiques qui doivent être développées en un entier (consultez ÉVALUATION ARITHMÉTIQUE ci-dessous) et commençant à zéro ; les tableaux associatifs sont référencés avec des chaînes arbitraires. Sauf mention contraire, les indices de tableaux indicés ne doivent pas être des entiers négatifs.

L'interpréteur effectue le développement des paramètres, des variables, le développement arithmétique, la substitution de commande, ainsi que la suppression des protections sur les indices de tableau indicés. Comme cela peut potentiellement aboutir à des chaînes vides, l'indexation par indice les traite comme des expressions qui sont évaluées à 0.

L'interpréteur effectue le développement des tildes, des paramètres et des variables, le développement arithmétique, la substitution de commande ainsi que la suppression des protections sur les indices de tableau associatif. Des chaînes vides ne peuvent pas être utilisées comme clés de tableau associatif.

bash crée automatiquement un tableau indicé si une variable est affectée à l'aide de la syntaxe

nom[indice]=valeur .
L'indice est traité comme une expression arithmétique qui doit être évaluée à un nombre supérieur ou égal à zéro, Pour déclarer explicitement un tableau indicé, utilisez
declare -a nom
(consultez COMMANDES INTERNES DE L'INTERPRÉTEUR ci-dessous).
declare -a nom[indice]
est aussi accepté ; l'indice est ignoré.

Les tableaux associatifs sont créés en utilisant


declare -A nom
.

Des attributs peuvent être indiqués pour une variable tableau en utilisant les commandes internes declare et readonly. Chaque attribut s'applique à tous les éléments d'un tableau.

Les tableaux sont affectés en utilisant l'affectation composée de la forme nom=(valeur_1 ... valeurn), où chaque valeur peut être de la forme [indice]=chaîne. Les affectations de tableau indicé ne nécessitent rien d’autre que chaîne. Chaque valeur de la liste est développée en utilisant tous les développements de l'interpréteur décrits ci-dessous dans DÉVELOPPEMENTS, mais les valeurs qui sont des affectations de variables valables, y compris les crochets et l'indice, ne sont pas soumises au développement des accolades ni au découpage en mots, comme c'est le cas pour l'affectation de variables individuelles.

Lors de l'affectation de tableaux indicés, 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. L'indexation commence à zéro.

Lors de l'affectation à un tableau associatif, les mots d'une affectation composée peuvent être soit des affectations pour lesquelles un indice est requis, soit une liste de mots qui est interprétée comme une séquence alternant clés et valeurs : nom=( clé1 valeur1 clé2 valeur2 ...). Elles sont traitées de la même manière que nom=( [clé1]=valeur1 [clé2]=valeur2 ...). Le premier mot de la liste détermine comment les autres mots sont interprétés ; toutes les affectations d'une liste doivent être du même type. Lors de l'utilisation de paires clé/valeur, les clés ne peuvent pas être absentes ou vides ; une valeur finale absente est traitée comme une chaîne vide.

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 ci-dessus.

Lors de l'affectation à un tableau indicé, si nom est indicé avec un nombre négatif, ce nombre est considéré comme ajouté à l'indice maximal de nom plus un ; ainsi, un indice négatif compte à rebours depuis la fin du tableau et un indice -1 fait référence au dernier élément du tableau.

L'opérateur “+=” concatène à une variable tableau lors d'une affectation en utilisant la syntaxe d'affectation composée ; consultez PARAMÈTRES ci-dessous.

Un élément de tableau est référencé avec la notation ${nom[indice]}. Les accolades sont nécessaires pour éviter les conflits avec le développement des chemins. Si indice est @ ou *, le développement de mot est tous les éléments de nom, à moins que cela soit noté dans la description d'une commande interne ou d'un développement de mot. Ces deux indices ne diffèrent que lorsque le mot apparaît entre guillemets doubles. Si le mot est entre guillemets doubles, le développement de ${nom[*]} est 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[@]} 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 développement du mot original et le développement du dernier paramètre est accolé à la dernière partie du développement du mot original. Le comportement est analogue à celui des paramètres spéciaux * et @ (consultez Paramètres spéciaux ci-dessus).

Le développement de ${#nom[indice]} correspond à la longueur de ${nom[indice]}. Si l'indice est * ou @, le développement est le nombre d'éléments dans le tableau.

Si l'indice utilisé pour référencer un élément d'un tableau indicé est évalué à un nombre inférieur à zéro, il est interprété comme un indice relatif à l'indice maximal du tableau plus un ; ainsi, un indice négatif compte à rebours depuis la fin du tableau et un indice -1 fait référence au dernier élément du tableau.

Le référencement d'une variable tableau sans indice est équivalent au référencement d'un tableau avec un indice de 0. Toute référence à une variable utilisant un indice valable est valable et bash crée un tableau si nécessaire.

Une variable tableau est considérée configurée si une valeur a été affectée à un indice. La chaîne NULL est une valeur possible.

Les clés (indices) d’un tableau peuvent être aussi bien obtenues que les valeurs. ${!nom[@]} et ${!nom[*]} se développent en indices assignés dans la variable tableau nom. Le traitement entre guillemets doubles est similaire au développement des paramètres spéciaux @ et * entre guillemets doubles.

La commande interne unset sert à détruire les tableaux. unset nom[indice] détruit l'élément de tableau d'indice indice, pour à la fois les tableaux indicés et les tableaux associatifs. Les indices négatifs des tableaux indicés sont traités comme décrit précédemment. Supprimer le dernier élément d'une variable tableau ne détruit pas la variable. unset nom, où nom est un tableau, supprime le tableau entier. unset nom[indice] se comporte différemment selon que nom est un tableau indicé ou associatif où indice est un * ou un @. Si nom est un tableau associatif, la commande détruit l'élément avec un indice * ou @. Si nom est un tableau indicé, unset supprime tous les éléments mais ne supprime pas le tableau lui-même.

Lors de l'utilisation d'un nom de variable avec un indice comme argument d'une commande comme avec unset, sans utiliser la syntaxe des développements de mots décrite précédemment, (par exemple, unset a[4]), l'argument est sujet au développement des chemins. L'argument doit être protégé si le développement des chemins n'est pas souhaité, (par exemple, unset 'a[4]').

Les commandes internes declare, local et readonly acceptent toutes une option -a pour préciser un tableau indicé et une option -A pour préciser un tableau associatif. Si les deux options sont fournies, -A est prioritaire. 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. Les autres commandes internes acceptent également les arguments de nom de tableau (par exemple, mapfile) ; consultez la description de chaque commande interne ci-dessous pour des détails. L'interpréteur fournit plusieurs variables de tableau intégrées.

DÉVELOPPEMENTS

Les développements sont appliqués à la ligne de commande après qu'elle a été découpée en mots. L'interpréteur effectue les développements suivants : 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, le développement des chemins et la suppression des protections.

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

Sur les systèmes qui le permettent, un développement supplémentaire a lieu : la substitution de processus. Il est réalisé en même temps que le développement du tilde, des paramètres, des variables et arithmétique, et que la substitution de commande.

La suppression des protections est toujours réalisée en dernier. Elle retire les caractères de protection présents dans le mot original, mais pas ceux résultant d'un des autres développements, à moins qu'ils n'aient été protégés eux-mêmes.

Seuls le développement des accolades, le découpage en mots et le développement des chemins peuvent augmenter le nombre de mots du développement. Les autres développements transforment un mot unique en un autre mot unique. La seule exception à cette règle est le développement de « $@ » et « ${nom[@]} », ainsi que, dans la plupart des cas, $* et ${nom[*]} comme expliqué précédemment (consultez PARAMÈTRES).

Développement des accolades

Le développement des accolades est un mécanisme permettant de produire des chaînes arbitraires partageant un préfixe et suffixe communs, l'un ou l'autre pouvant être vide. Il est similaire au développement des chemins, mais les noms de fichier produits n'existent pas nécessairement. Les motifs qui seront développés sont formés d'un préambule facultatif, suivi soit d'une série de chaînes séparées par des virgules, soit de l'expression d'une série entre accolades, et suivi d'un post-scriptum facultatif. Le préambule est inséré devant chacune des chaînes situées 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 ; le développement d'accolades conserve l'ordre de gauche à droite. Par exemple, a{d,c,b}e se développe en “ade ace abe”.

Une expression de séquence est de la forme x..y[..incr], où x et y sont soit des entiers, soit des lettres uniques, et incr, un incrément facultatif, est un entier. Lorsqu'il s'agit d'entiers, l'expression est remplacée par la liste des nombres entre x et y inclus. Si x ou y commencent par un zéro, chaque terme généré contiendra le même nombre de chiffres, en ajoutant des zéros au besoin. S'il s'agit de lettres, l'expression se développe à l'ensemble des caractères situés entre x et y, inclus, d'un point de vue lexicographique en utilisant les paramètres régionaux de C. Remarquez que x et y doivent être du même type (entier ou lettre). Si l'incrément est fourni, il est utilisé comme différence entre chaque terme. L'incrément par défaut est 1 ou -1 selon les valeurs de x et y.

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 contexte du développement ni du texte entre les accolades.

Un développement d'accolades correctement formé doit contenir des accolades ouvrante et fermante non protégées et au moins une virgule non protégée ou une expression de série valable. Tout développement d'accolades incorrectement formé est laissé inchangé.

Un “{” ou un Q, 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, et empêche le développement d'accolades jusqu'au dernier “}”.

Cette construction est typiquement utilisée comme raccourci lorsque le préfixe commun aux chaînes à générer est plus long que dans les exemples précédents :

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 le mot “file{1,2}” est fourni à sh, il reste inchangé en sortie. En revanche, bash le transforme en “file1 file2” après le développement d'accolades. Lancez bash avec l'option +B ou désactivez le développement des accolades avec l'option +B de la commande set si une compatibilité stricte avec sh est nécessaire (consultez COMMANDES INTERNES DE L'INTERPRÉTEUR ci-dessous).

Développement du tilde

Si un mot commence par 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 identifiant de connexion possible. Si cet identifiant de connexion est la chaîne NULL, le tilde est remplacé par la valeur du paramètre d'interpréteur HOME. Si HOME n'existe pas, le tilde correspond au répertoire personnel de l'utilisateur exécutant l'interpréteur à la place. Sinon le préfixe tilde est remplacé par le répertoire personnel associé à l'identifiant de connexion indiqué.

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 tel 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 non précédé de “+” ou “-”, le développement du tilde présume que c'est “+”.

Les résultats du développement sont traités comme s'ils étaient protégés, aussi les remplacements ne sont pas sujets au découpage en mots et au développement des chemins.

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

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

bash effectue aussi le développement des tildes sur les mots satisfaisant les conditions d'affectations de variable (comme décrit précédemment dans PARAMÈTRES) quand elles apparaissent comme arguments de commandes simples. bash ne le fait pas en mode POSIX sauf pour les commandes de déclaration listées ci-dessus.

Développement des paramètres

L'opérateur “$” permet d'introduire le développement des paramètres, la substitution de commande ou le développement arithmétique. Les noms du paramètre ou du symbole à développer peuvent être encadrés par des accolades facultatives, mais qui permettent d'éviter le développement de la variable à partir de caractères les suivant immédiatement et qui pourraient être considérés comme appartenant à leur nom.

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

La forme élémentaire de développement des paramètres est

${paramètre}

qui remplace la valeur du paramètre. Les accolades sont nécessaires 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. Le paramètre est un paramètre d’interpréteur (comme décrit précédemment dans PARAMÈTRES) ou une référence de tableau (Tableaux).

Si le premier caractère du paramètre est un point d'exclamation (!), et si le paramètre n'est pas un nameref, il introduit un niveau d'indirection de variable. bash utilise la valeur formée par le développement du reste du paramètre en tant que nouveau paramètre. Ce nouveau paramètre est alors développé et la valeur utilisée pour le reste du développement plutôt que le développement du paramètre original. On appelle ce mécanisme le développement indirect. La valeur est sujette au développement de tildes et de paramètres, à la substitution de commande ou au développement arithmétique. Si le paramètre est un nameref, le développement porte sur le nom du paramètre référencé par le paramètre plutôt que sur le développement indirect complet pour des raisons de compatibilité. Les exceptions à cela sont les développements de ${!préfixe*} et de ${!nom[@]} décrits ci-dessous. 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 de 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, en utilisant les formes documentées ci-dessous (par exemple :-), bash teste si le paramètre est inexistant ou NULL. L'absence de deux-points induit un test sur la seule inexistence du paramètre.

${paramètre:-mot}
Utilisation de valeur par défaut. Si le paramètre est inexistant ou NULL, le développement du mot est substitué. Sinon, c'est la valeur du paramètre qui est substituée.
${paramètre:=mot}
Affectation de valeur par défaut. Si le paramètre est inexistant ou NULL, le développement du mot est affecté à paramètre et il est la valeur finale. Les paramètres positionnels et spéciaux ne peuvent pas être affectés de cette façon.
${paramètre:?mot}
Affichage d'erreur si NULL ou inexistant. Si le paramètre est inexistant ou NULL, l'interpréteur affiche le développement du mot (ou un message approprié si aucun mot n'est fourni) sur la sortie d'erreur standard et, s'il n'est pas interactif, l'interpréteur termine avec un code différent de zéro. Un interpréteur interactif ne termine pas, mais n'exécute pas la commande associée au développement. Sinon, la valeur du paramètre est substituée.
${paramètre:+mot}
Utilisation de valeur alternative. Si le paramètre est NULL ou inexistant, rien n'est substitué. Sinon le développement du mot est substitué. La valeur du paramètre n'est pas utilisée.
${paramètre:début}
${paramètre:début:longueur}
Développement des sous-chaînes. Se développe pour fournir la sous-chaîne de longueur indiquée (en caractère) commençant au début. Si le paramètre est @ ou *, un tableau indicé par @ ou *, ou un nom de tableau associatif, le résultat diffère comme décrit ci-dessous. Si :longueur est omis (la première forme ci-dessus), le développement est la sous-chaîne commençant au caractère indiqué par début et s'étendant jusqu'à la fin de la valeur. Si début est omis, il est traité comme un zéro. Si longueur est omise, mais si les deux-points après début sont présents, il est traité comme un zéro. La longueur et le début sont des expressions arithmétiques (consultez ÉVALUATION ARITHMÉTIQUE ci-dessous).
Si le début est négatif, sa valeur est considérée à partir de la fin du contenu du paramètre. Si longueur est négatif, sa valeur est considérée comme une position en caractère à partir de la fin de la valeur du paramètre plutôt que comme un nombre de caractères, et le développement est constitué des caractères entre le début et cette position. Remarquez que les positions négatives doivent être séparées des deux-points par au moins une espace pour éviter d’être confondues avec le développement de :-.
Si le paramètre est @ ou *, le résultat correspond à longueur paramètres positionnels commençant au début. Une valeur négative de début est considérée relative au plus grand paramètre positionnel plus un, ainsi un indice -1 fait référence au dernier paramètre positionnel (ou 0 s'il n'y a pas de paramètre positionnel). C’est une erreur de développement si longueur est évaluée à un nombre négatif.
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 maximale de l'indice du tableau considéré plus un. C’est une erreur de développement si longueur est évaluée à un nombre négatif.
Le développement de sous-chaîne appliqué à un tableau associatif produit des résultats non définis.
L'indexation des sous-chaînes commence à zéro, sauf pour les paramètres positionnels pour lesquels l'indexation commence à 1 par défaut. Si début est 0, et que les paramètres positionnels sont utilisés, la liste est préfixée par $0.
${!préfixe*}
${!préfixe@}
Noms correspondant au préfixe. Se développe en noms des variables dont les noms commencent par préfixe, séparés par le premier caractère de la variable spéciale IFS. Si @ est utilisé et que le développement apparaît entre guillemets doubles, chaque nom de variable se développe séparément.
${!nom[@]}
${!nom[*]}
Liste des clés du tableau. Si nom est une variable de type tableau, elle se développe en liste des indices (clés) du tableau affecté à nom. Si nom n'est pas un tableau, se développe en 0 si nom existe et en NULL sinon. Quand @ est utilisé et que le développement apparaît entre guillemets doubles, chaque clé se développe en un mot séparé.
${#paramètre}
Longueur du paramètre. Remplace la longueur, en caractères, de la valeur développée 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 du tableau. Si le paramètre est un nom de tableau indicé par un nombre négatif, ce nombre est considéré comme ajouté à l'indice maximal de paramètre plus un (ainsi un indice négatif compte à rebours depuis la fin du tableau et un indice -1 fait référence au dernier élément).
${paramètre#mot}
${paramètre##mot}
Retrait du motif correspondant au préfixe. Le mot est développé pour fournir un motif, comme dans le développement des chemins et mis en correspondance avec la valeur développée du paramètre avec les règles décrites dans Motifs génériques ci-dessous. Si le motif correspond au début de la valeur du paramètre, alors le résultat du développement prend la valeur développée du paramètre après suppression du motif correspondant le plus court (cas “#” ) ou du plus long (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 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}
Retrait du motif correspondant au suffixe. Le mot est développé pour fournir un motif, comme dans le développement des chemins et mis en correspondance avec la valeur développée du paramètre avec les règles décrites dans Motifs génériques ci-dessous. Si le motif correspond à une portion finale de la valeur développée du paramètre, alors le développement prend la valeur développée du paramètre après suppression du motif correspondant le plus court (cas “%” ) ou du plus long (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 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}
${paramètre/#motif/chaîne}
${paramètre/%motif/chaîne}
Substitution de motif. Le motif est développé pour produire un motif et comparé à la valeur développée du paramètre comme décrit dans Motifs génériques ci-dessous. La plus longue portion correspondant au motif est remplacée par la chaîne. La chaîne est sujette au développement du tilde, des paramètres et des variables, au développement arithmétique, à la substitution de commande et de processus, et à la suppression des protections.
Dans la première forme ci-dessus, seule la première correspondance est remplacée. S'il y a deux barres obliques séparant le paramètre et le motif, (la seconde forme ci-dessus) toutes les correspondances au motif sont remplacées par la chaîne. Si le motif est précédé de # (la troisième forme ci-dessus), il doit correspondre au début de la valeur développée du paramètre. Si le motif est précédé de % (la quatrième forme ci-dessus), il doit correspondre à la fin de la valeur développée du paramètre.
Si le développement de la chaîne est NULL, les portions correspondant au motif sont supprimées et le / suivant le motif peut être omis.
Si l'option d'interpréteur patsub_replacement est activée en utilisant shopt, toutes les instances non protégées de & dans la chaîne sont remplacées par la partie correspondante du motif.
La protection d'une partie de la chaîne empêche les remplacements dans le développement de la partie protégée, y compris le remplacement des chaînes stockées dans les variables de l'interpréteur. La contre-oblique protège & dans la chaîne ; la contre-oblique est supprimée afin de permettre un & littéral dans la chaîne de remplacement. La contre-oblique peut aussi être utilisée pour protéger une contre-oblique ; \\ résulte en une contre-oblique littérale dans le remplacement. Les utilisateurs doivent faire attention si la chaîne est protégée entre des guillemets doubles pour éviter des interactions non souhaitées entre la contre-oblique et les guillemets doubles, dans la mesure où la contre-oblique a une signification particulière avec des guillemets doubles. La substitution de motif réalise la vérification de la présence de & non protégée après le développement de chaîne ; les développeurs de programmes d’interpréteur doivent protéger toutes les occurrences de & qu'ils souhaitent être traitées littéralement dans le remplacement et s'assurer que toutes les instances de & qu'ils souhaitent voir remplacées ne soient pas protégées.
Comme les opérateurs de suppression de motif, les guillemets doubles entourant la chaîne de remplacement protègent les caractères développés, tandis que les guillemets doubles encadrant toute la substitution de paramètre ne le font pas, dans la mesure où le développement est réalisé dans un contexte qui ne prend pas en compte les guillemets doubles encadrants.
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.
Si le paramètre est @ ou *, l'opération de substitution 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 substitution est appliquée à chaque élément du tableau tour à tour et le développement est la liste résultante.
${paramètre^motif}
${paramètre^motif}
${paramètre,motif}
${paramètre,,motif}
Modification de la casse. Ce développement modifie la casse des caractères alphabétiques du paramètre. D'abord, le motif est développé pour fournir un motif, comme décrit dans Motifs génériques ci-dessous. bash teste chaque caractère de la valeur développée du paramètre par rapport au motif comme décrit ci-dessous. Si un caractère correspond au motif, sa casse est convertie. Le motif ne doit pas essayer de correspondre à plus d’un caractère.
L'utilisation de “^” convertit les lettres minuscules correspondant au motif en capitales ; “,” convertit les lettres capitales correspondant à ce motif en minuscules. Les variantes ^ et , examinent le premier caractère de la valeur développée et convertissent sa casse s'il correspond au motif ; les variantes ^^ et ,, examinent tous les caractères de la valeur développée et convertissent tous ceux qui correspondent au motif. Si motif est omis, il est traité comme un ?, ce qui correspond à n'importe quel caractère.
Si le paramètre est @ ou *, l'opération de modification de casse 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 modification de casse est appliquée à chaque élément du tableau tour à tour et le développement est la liste résultante.
${paramètre@opérateur}
Transformation de paramètre. Le développement est soit une transformation de la valeur du paramètre ou des informations sur paramètre lui-même, selon la valeur de opérateur. Chaque opérateur est une lettre unique :

Le développement est une chaîne qui est la valeur de l'argument avec des caractères alphabétiques en minuscule convertis en capitale.
Le développement est une chaîne qui est la valeur de l'argument avec son premier caractère converti en capitale, si c'est un caractère alphabétique.
Le développement est une chaîne qui est la valeur de l'argument avec les caractères alphabétiques en capitale convertis en minuscule.
Le développement est une chaîne qui est la valeur de l'argument protégée dans un format réutilisable en entrée de l'interpréteur.
Le développement est une chaîne qui est la valeur du paramètre avec des suites de caractères de protection par contre-oblique développée comme avec le mécanisme de protection $'...'.
Le développement est une chaîne qui est le résultat du développement de la valeur du paramètre comme s'il s'agissait d'une chaîne d'invite (consultez INVITES ci-dessous).
Le développement est une chaîne sous la forme d'une affectation ou d'une commande declare qui, lorsqu'elle est évaluée, recrée le paramètre avec sa valeur et ses attributs.
Produit une version potentiellement protégée de la valeur de l'argument, sauf qu'il affiche les valeurs des tableaux indicés et associatifs comme une séquence de paires clé/valeur protégées (consultez Tableaux ci-dessus). Les clés et les valeurs sont protégées dans un format réutilisable en entrée de l'interpréteur.
Le développement est une chaîne consistant en valeurs d'indicateur représentant les attributs de paramètre.
Comme la transformation K, mais développe les clés et les valeurs des tableaux indicés et associatifs pour séparer les mots après le découpage en mots.

Si le paramètre est @ ou *, l'opération 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 est appliquée à chaque élément du tableau tour à tour et le développement est la liste résultante.

Le résultat du développement est sujet au découpage en mots et au développement des chemins comme décrit ci-dessous.

Substitution de commande

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

$(commande)

ou (obsolète)
`commande`.

bash effectue le développement en exécutant la commande dans un environnement de sous-interpréteur et en remplaçant la substitution de commande par sa sortie standard dont les éventuels sauts de ligne finaux sont supprimés. Les changements de ligne 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).

Avec l'ancienne forme de substitution avec les accents graves « ` », 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.

Il existe une autre forme de substitution de commande :

${c commande;}

qui exécute la commande dans l'environnement d'exécution actuel et capture sa sortie, les caractères finaux de changement de ligne étant aussi supprimés.

Le caractère c suivant l'accolade ouvrante doit être une espace, une tabulation, un changement de ligne ou un |, et l'accolade fermante doit être à une position où un mot réservé peut apparaître (c'est-à-dire précédée d'une terminaison de commande telle un point-virgule). bash permet que l'accolade fermante soit jointe aux caractères restants du mot sans être suivie d'un métacaractère de l'interpréteur comme l'exigerait habituellement un mot réservé.

Tout effet secondaire d'une commande prend effet immédiatement dans l'environnement d'exécution actuel et persiste dans cet environnement après la fin de la commande (par exemple, la commande interne exit quitte l'interpréteur).

Ce type de substitution de commande ressemble de façon superficielle à l'exécution d'une fonction d'interpréteur sans nom : des variables locales sont créées comme lors de l'exécution d'une fonction d'interpréteur et la commande interne return force la commande à se terminer ; néanmoins, le reste de l'environnement d'exécution, y compris les paramètres positionnels, est partagé avec l'appelant.

Si le premier caractère suivant l'accolade ouvrante est un |, la construction se développe à la valeur de la variable d'interpréteur REPLY après l'exécution de la commande, sans supprimer les éventuels sauts de ligne finaux, et la sortie standard de la commande reste la même que dans l'interpréteur appelant. bash crée REPLY comme une variable locale non définie initialement quand la commande s'exécute et restaure REPLY à la valeur qu'elle avait avant la substitution de commande après que la commande a terminé, comme pour toute variable locale.

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, bash n'effectue pas le découpage en mots et le développement des chemins sur les résultats.

Développement arithmétique

Le développement arithmétique évalue une expression arithmétique et le résultat lui est substitué. 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 des caractères guillemet double qui ne sont pas échappés dans l'expression ne sont pas traités spécifiquement et sont supprimés. Tous les lexèmes dans l'expression sont sujets au développement des paramètres et des variables, à la substitution de commande et à la suppression des protections. Le résultat est traité comme l'expression arithmétique à évaluer. Dans la mesure où la manière dont bash gère les guillemets doubles peut aboutir potentiellement à des chaînes vides, le développement arithmétique les traite comme des expressions qui s'évaluent à 0. Les développements arithmétiques peuvent être imbriqués.

L'évaluation est effectuée conformément aux règles décrites ci-dessous dans ÉVALUATION ARITHMÉTIQUE. Si l'expression est non valable, bash affiche un message sur la sortie d'erreur standard indiquant l'échec, n'effectue pas la substitution et n'exécute pas la commande associée au développement.

Substitution de processus

La substitution de processus permet à une entrée ou une sortie d'un processus d’être référencée en utilisant un nom de fichier. Elle prend la forme <(liste) ou >(liste). La liste de processus est exécutée de façon asynchrone et son entrée ou sortie apparaît comme un nom de fichier. Le nom de ce fichier est passé en argument à la commande actuelle comme résultat de ce développement.

Si la forme >(list) est utilisée, l'écriture dans le fichier fournit une entrée pour liste. Si la forme <(list) est utilisée, la lecture du fichier permet d'obtenir le résultat de liste. Il ne doit y avoir aucune espace entre le < ou le > et la parenthèse ouvrante, sinon la construction serait interprétée comme une redirection.

La substitution de processus est prise en charge sur les systèmes acceptant le mécanisme des tubes nommés (FIFO) ou la méthode /dev/fd de nommage de fichiers ouverts.

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. Les mots qui ne sont pas développés ne sont pas découpés.

L'interpréteur considère chaque caractère du paramètre IFS comme un délimiteur et découpe le résultat des autres développements en mots utilisant ces caractères comme terminaisons de champ.

Un caractère blanc de IFS est une espace comme définie ci-dessus (voir Définitions qui apparaît dans la valeur de IFS. Une espace, une tabulation ou un changement de ligne sont toujours considérés comme une espace IFS même s'ils n'apparaissent pas dans la catégorie espace du paramètre linguistique régional.

Si IFS n'existe pas, le découpage de champ agit comme si sa valeur était <espace><tab><changement_de_ligne> et traite ces caractères comme un caractère blanc de IFS. Si la valeur de IFS est NULL, aucun découpage n'est effectué, mais les arguments NULL implicites (voir plus bas) sont toujours supprimés.

Le découpage en mots commence par la suppression des séquences de caractères blancs de IFS du début et de la fin des résultats du développement précédent, puis découpe les mots restants.

Si la valeur de IFS consiste uniquement en blanc de IFS, toute séquence de caractères blancs de IFS délimite un champ ; ainsi un champ consiste en caractères qui ne sont pas des blancs de IFS non protégés, et les champs NULL ne résultent que de la protection.

Si IFS contient un caractère qui n'est pas une espace, tout caractère de la valeur de IFS n'est pas un blanc de IFS et tous les caractères blancs de IFS adjacents délimitent un champ. Cela signifie que des délimiteurs qui ne sont pas des blancs de IFS adjacents produisent un champ NULL. Une séquence de caractères blancs de IFS délimite également un champ.

Les arguments NULL explicites ("" ou '') sont conservés et passés à des commandes comme chaînes vides. Les arguments NULL implicites non protégés, résultant du développement des paramètres qui n'ont pas de valeurs, sont supprimés. Le développement d'un paramètre sans valeur entre guillemets doubles produit un champ NULL, qui est conservé et passé à une commande comme une chaîne vide.

Quand un argument NULL protégé apparaît comme appartenant à un mot dont le développement n'est pas NULL, le découpage en mots supprime la portion d'argument NULL, laissant le développement non NULL. C'est-à-dire que le mot “-d''” devient “-d” après le découpage en mots et le retrait de l'argument NULL.

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 et n'est pas protégé, le mot est considéré comme un motif et remplacé par une liste triée de noms de fichier correspondant à ce motif (consultez Motifs génériques ci-dessous) en fonction de la valeur de la variable de l'interpréteur GLOBSORT.

Si aucun nom de fichier ne correspond et si l'option d'interpréteur nullglob n'est pas activé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, bash affiche un message d'erreur et n'exécute pas la commande. 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 d’intervalle comme [a-z] (voir ci-dessous) 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 ne soit activée. Pour être mis en correspondance avec les noms de fichier . et .., le motif doit débuter par un “.” (par exemple : “.?”), même si l'option dotglob est activée. Si l'option d'interpréteur globskipdots est activée, les noms de fichier . et .. ne sont jamais mis en correspondance, même si le motif débute par un “.”. Quand il ne s'agit pas de correspondance avec des chemins, le caractère “.” n'est pas traité spécifiquement.

Lors de la correspondance avec un chemin, le caractère barre oblique doit toujours être mis en correspondance explicitement par une barre oblique dans le motif, mais dans les autres contextes de correspondance, il peut être mis en correspondance par un caractère de motif spécial comme décrit ci-dessous dans Motifs génériques.

Voir la description de la commande shopt dans COMMANDES INTERNES DE L'INTERPRÉTEUR pour une description des options d'interpréteur nocaseglob, nullglob, globskipdots, failglob et dotglob.

La variable de l'interpréteur GLOBIGNORE peut servir à restreindre l'ensemble des noms de fichier correspondant à un motif. Si GLOBIGNORE existe, chaque nom de fichier qui correspond aussi à un motif de GLOBIGNORE est supprimé de la liste des correspondances. Si l'option nocaseglob existe, la mise en correspondance avec les motifs dans GLOBIGNORE est réalisée sans tenir compte de la casse. Les noms de fichier . et .. sont toujours ignorés quand GLOBIGNORE existe et n'est pas NULL. Toutefois, configurer GLOBIGNORE avec une valeur non NULL a pour effet d'activer l'option d'interpréteur dotglob, ainsi tous les autres noms de fichier 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. La correspondance de motif respecte la configuration de l'option d'interpréteur extglob.

La valeur de la variable d'interpréteur GLOBSORT contrôle la manière dont les résultats de développement des chemins sont triés, comme décrit ci-dessus dans Variables de l'interpréteur.

Motifs génériques

Tout caractère apparaissant dans un motif, hormis les caractères spéciaux décrits ci-dessous, correspond à lui-même. Le caractère NULL 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 de motifs ont les significations suivantes :

*
Correspond à n'importe quelle chaîne, y compris la chaîne NULL. Si l'option globstar de l'interpréteur est activée, et que * est utilisé dans un contexte de développement des chemins, deux * adjacents sont utilisés pour un seul motif correspondant à tous les fichiers et zéro ou plus de répertoires et sous-répertoires. Lorsqu'ils sont suivis de /, deux * adjacents correspondent seulement aux répertoires et sous-répertoires.
?
Correspond à n'importe quel caractère.
[...]
Correspond à n'importe quel caractère encadré par les crochets. Cela est connu sous le nom d'expression entre crochets et correspond à un seul caractère. Un couple de caractères séparés par un trait d'union indique une expression d’intervalle ; tout caractère qui correspond à n'importe quel caractère situé entre les deux bornes incluses, en utilisant les suites de collations et le jeu de caractères des paramètres linguistiques régionaux actuels, correspond. Si le premier caractère suivant le [ est un ! ou un ^ alors la correspondance se fait sur tous les caractères hors intervalle. Pour une correspondance avec un -, il faut l'inclure comme premier ou dernier caractère de l'ensemble. Pour une correspondance avec un ], il faut l'inclure comme premier caractère de l'ensemble.
L'ordre de tri des caractères dans les expressions d’intervalle et les caractères inclus dans l'intervalle sont déterminés par les paramètres linguistiques régionaux actuels et par les valeurs des variables de l'interpréteur LC_COLLATE ou LC_ALL si existantes. Pour obtenir l'interprétation traditionnelle des expressions d’intervalle, où [a-d] est équivalent à [abcd], configurez la valeur des variables d’interpréteur LC_ALL ou LC_ALL à C ou activez l'option d’interpréteur globasciiranges.
Dans une expression entre crochets, on peut indiquer une classe de caractère en utilisant la syntaxe [:classe:], où classe est l'une des classes suivantes, définies dans la norme POSIX  :
alnum alpha ascii blank cntrl digit graph lower print punct space upper word xdigit
Une classe correspond à n'importe quel caractère qui s'y trouve. La classe de caractères word correspond aux lettres, aux chiffres et au tiret bas « _ ».
Dans une expression entre crochets, on peut indiquer une classe d'équivalences en utilisant la syntaxe [=c=] qui correspond à n'importe quel caractère ayant le même poids de collation (comme indiqué par les paramètres linguistiques régionaux actuels) que le caractère c.
Dans une expression entre crochets, la syntaxe [.symbole.] correspond au symbole de collation symbole.

Si l'option extglob d'interpréteur est activée en utilisant la commande interne shopt l'interpréteur reconnaît plusieurs opérateurs de correspondance étendue. Dans la description suivante, une liste-motifs est une liste d'un ou plusieurs motifs séparés par des |. Les motifs composés sont formés en utilisant un ou plusieurs sous-motifs comme suit :

?(liste-motifs)
Correspond à zéro ou une occurrence des motifs indiqués.
*(liste-motifs)
Correspond à zéro ou plusieurs occurrences des motifs indiqués.
+(liste-motifs)
Correspond à une ou plusieurs occurrences des motifs indiqués.
@(liste-motifs)
Correspond à une occurrence des motifs indiqués.
!(liste-motifs)
Correspond à tout sauf à l'un des motifs indiqués.

L'option extglob d'interpréteur modifie le comportement de l'analyseur dans la mesure où les parenthèses sont normalement traitées comme des opérateurs avec une signification syntaxique. Pour être sûr que les motifs développés mis en correspondance sont analysés correctement, il faut s'assurer que extglob est activé avant d'analyser les constructions contenant les motifs, y compris les fonctions de l'interpréteur et les substitutions de commande.

Lors de la correspondance avec des noms de fichier, l'option de l'interpréteur dotglob détermine l'ensemble de noms de fichier à tester : quand dotglob est activé, l'ensemble de noms de fichier inclut tous les fichiers commençant par “.”, mais . et .. doivent être mis en correspondance avec un motif ou un sous-motif qui commence par un point ; quand dotglob est désactivé, l'ensemble ne comprend pas tous les fichiers commençant par “.” à moins que le motif ou le sous-motif débute par un “.”. Si l'option d'interpréteur globskipdots est activée, les noms de fichier . et .. n'apparaissent jamais dans l'ensemble. Comme précédemment, “.” tout seul a une signification particulière lors de la correspondance avec des noms de fichier.

La mise en correspondance de motifs étendus complexes avec de longues chaînes est lente surtout quand les motifs contiennent des alternances et les chaînes contiennent plusieurs correspondances. L'utilisation de correspondances séparées avec des chaînes plus courtes ou en utilisant des tableaux de chaînes à la place d'une longue chaîne unique peut être plus rapide.

Suppression des protections

Après les développements précédents, toutes les occurrences non protégées des caractères \, ' et " qui ne résultent pas d'un des développements ci-dessus sont supprimées.

REDIRECTIONS

Avant qu'une commande ne soit exécutée, il est possible de rediriger son entrée ou sa sortie en utilisant une notation spéciale prise en compte par l'interpréteur. La redirection permet aux descripteurs de fichier d’être dupliqués, ouverts, fermés, de faire référence à d’autres fichiers et peut modifier les fichiers lus et écrits par la commande. Lorsque utilisées avec la commande interne exec, les redirections permettent de modifier les descripteurs de fichier dans l'environnement d’exécution actuel de l'interpréteur. Les opérateurs de redirection suivants peuvent précéder ou apparaître n'importe où dans une commande simple ou suivre une commande. Les redirections sont traitées dans leur ordre d'apparition, de gauche à droite.

Toutes les redirections pouvant être précédées par un numéro de descripteur de fichier peuvent aussi être précédées par un mot de la forme {nom_de_variable}. Dans ce cas, pour chaque opérateur de redirection à part >&- and <&-, l'interpréteur de commande alloue un descripteur de fichier supérieur ou égal à 10 et l'affecte à nom_de_variable. Si {nom_de_variable} précède >&- ou <&-, la valeur de nom_de_variable définit le descripteur de fichier à fermer. Si {nom_de_variable} est fourni, la redirection persiste au-delà de la portée de la commande, ce qui permet au programmeur de l'interpréteur de gérer manuellement la durée de vie du descripteur de fichier sans utiliser la commande interne exec. L'option de l'interpréteur varredir_close gère ce comportement.

Dans les descriptions suivantes, si le numéro de descripteur de fichier est omis et que le premier caractère de l'opérateur de redirection est “<”, la redirection se rapporte à la sortie standard (descripteur de fichier 0). Si le premier caractère de l'opérateur de redirection est “>”, la redirection se rapporte à la sortie standard (descripteur de fichier 1)

Le mot qui suit l'opérateur de redirection dans les descriptions suivantes, à moins qu'il en soit fait état autrement, est soumis au développement des accolades, du tilde, des paramètres et des variables, à la substitution de commande, au développement arithmétique, à la suppression des protections, au développement des chemins et au découpage en mots. S'il se développe en plusieurs mots, bash signale une erreur.

L'ordre des redirections est important. Par exemple, la commande

ls > liste_répertoires 2>&1

redirige à la fois la sortie standard et la sortie d'erreur standard vers le fichier liste_répertoires, alors que la commande

ls 2>&1 > liste_répertoires

ne redirige que la sortie standard vers le fichier liste_répertoires, car la sortie d'erreur standard a été dirigée vers la sortie standard avant que celle-ci ne soit redirigée vers liste_répertoires.

bash gère plusieurs noms de fichier spécifiquement quand ils sont utilisés dans des redirections. Si le système d'exploitation sur lequel bash s'exécute fournit ces fichiers spéciaux, bash les utilise ; sinon, il les émulera en interne avec le comportement décrit ci-dessous.

/dev/fd/df
Si df est un entier valable, duplique le descripteur de fichier df.
/dev/stdin
Le descripteur de fichier 0 est dupliqué.
/dev/stdout
Le descripteur de fichier 1 est dupliqué.
/dev/stderr
Le descripteur de fichier 2 est dupliqué.
/dev/tcp/hôte/port
Si hôte est un nom valable de machine ou une adresse Internet valable et si port est un numéro de port entier ou un nom de service, bash tentera d'ouvrir le socket TCP correspondant.
/dev/udp/hôte/port
Si hôte est un nom valable de machine ou une adresse Internet valable et si port est un numéro de port entier ou un nom de service, bash tentera d'ouvrir le socket UDP correspondant.

Un échec à l'ouverture ou à la création de fichier conduit à l'échec de la redirection.

Les redirections utilisant des descripteurs de fichier supérieurs à 9 doivent être utilisées avec précaution, car des conflits peuvent survenir avec les descripteurs de fichier utilisés en interne par l'interpréteur.

Notez que la commande interne exec peut faire appliquer les redirections à l'interpréteur de commande en cours.

Redirection d'entrée

Une redirection d'entrée ouvre en lecture avec le descripteur de fichier numéro n le fichier dont le nom résulte du développement du mot ou en tant qu'entrée standard (descripteur de fichier 0) si n n'est pas indiqué.

Le format général des redirections d'entrée est :

[n]<mot

Redirection de sortie

Une redirection de sortie ouvre en écriture le fichier dont le nom résulte du développement du mot avec comme descripteur de fichier n ou en tant que sortie standard (descripteur de fichier 1) si n n'est pas indiqué. Si le fichier n'existe pas, il est créé. S'il existait déjà, sa taille est réduite à zéro.

Le format général des redirections de sortie est le suivant :

[n]>mot

Si l'opérateur de redirection est > et si l'option noclobber de la commande interne set est activée, la redirection échoue si le fichier dont le nom résulte du développement du mot existe et est un fichier normal. Si l'opérateur de redirection est >| ou si l'opérateur de redirection > avec l'option noclobber de la commande interne set non activée, bash tente la redirection même si le fichier dont le nom résulte du développement du mot existe.

Concaténation d'une sortie redirigée

La redirection de la sortie de cette façon ouvre le fichier dont le nom résulte du développement du mot pour une concaténation du descripteur de fichier n ou de la sortie standard (descripteur de fichier 1) si n n'est pas indiqué. Si le fichier n'existe pas, il est créé.

Le format général pour la concaténation de sorties est :

[n]>>mot

Redirection de la sortie standard et de la sortie d'erreur standard

Cette construction redirige à la fois la sortie standard (descripteur 0) et la sortie d'erreur standard (descripteur 2) dans le fichier dont le nom est le résultat du développement du mot.

Il y a deux formes pour rediriger la sortie standard et la sortie d'erreur standard :

&>mot

et
>&mot

La première des deux formes est préférée. C'est sémantiquement équivalent à

>mot 2>&1

En utilisant la deuxième forme, mot ne peut pas être développé en nombre ou -. Si c’est le cas, les autres opérateurs de redirection s’appliquent (consultez Dédoublement de descripteurs de fichier ci-dessous) pour des raisons de compatibilité.

Concanétation de la sortie standard et de la sortie d'erreur standard

Cette construction ajoute à la fois la sortie standard (descripteur 1) et la sortie d'erreur standard (descripteur 2) au fichier dont le nom est le résultat du développement du mot.

La forme pour l'ajout de la sortie standard et de la sortie d'erreur standard est :

&>>mot

C'est sémantiquement équivalent à

>>mot 2>&1

(consultez Dédoublement de descripteurs de fichier ci-dessous).

Document en ligne (herdoc)

Ce type de redirection commande à l'interpréteur de lire son entrée du code source actuel jusqu'à ce qu'il voie une ligne contenant seulement le délimiteur prévu (sans blancs finaux). Toutes les lignes lues jusqu'à ce point deviennent alors l'entrée standard (ou le descripteur de fichier n, si n est spécifié) pour une commande.

Le format des heredoc est le suivant :

[n]<<[-]mot

heredoc délimiteur

L'interpréteur n'effectue pas le développement de paramètre et de variable, la substitution de commande, le développement arithmétique ou le développement des chemins sur le mot.

Si une partie du mot est protégée, le délimiteur est le résultat de la suppression des protections sur mot et les lignes du heredoc ne sont pas développées. Si mot n'est pas protégé, le délimiteur est le mot lui-même et le heredoc est traité de la même façon qu'une chaîne entre guillemets doubles : toutes les lignes du heredoc sont soumises au développement des paramètres, à la substitution de commande et au développement arithmétique, la suite de caractères \<changement_de_ligne> est traitée littéralement et \ doit être utilisée pour protéger les caractères \, $ et `. Néanmoins, les guillemets doubles n'ont pas de signification particulière.

Si l'opérateur de redirection est <<-, alors l'interpréteur supprime les tabulations en tête de chaque ligne de l'entrée, y compris dans la ligne contenant le délimiteur. Cela permet d'indenter de façon naturelle les heredoc au sein des scripts.

Si le délimiteur n'est pas protégé, la suite de caractères \<changement_de_ligne> est traitée comme une continuation de ligne : les deux lignes sont jointes et la paire contre-oblique/changement de ligne est supprimée. Cela se produit lors de la lecture du document en ligne, avant la vérification du délimiteur de fin, de sorte que les lignes jointes peuvent former le délimiteur de fin.

Chaînes en ligne (here-string)

Une variante aux heredoc dont le format est :

[n]<<<mot

Le mot est sujet 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. Ni le développement des chemins, ni le découpage en mots ne sont réalisés. Le résultat est fourni comme une seule chaîne, avec l'ajout d'un caractère de changement de ligne, à la commande sur son entrée standard (ou sur le descripteur de fichier n, si n est spécifié).

Dédoublement de descripteurs de fichier

L'opérateur de redirection

[n]<&mot

permet de dupliquer les descripteurs de fichier en entrée. Si le mot se transforme en un ou plusieurs chiffres, le descripteur de fichier n devient une copie de ce descripteur. C'est une erreur de redirection si les chiffres du mot ne correspondent pas à un descripteur ouvert en lecture. Si le mot prend la forme -, le descripteur n est fermé. Si n n'est pas mentionné, l'entrée standard (descripteur 0) est utilisée.

L'opérateur

[n]>&mot

est utilisé de façon similaire pour dupliquer les descripteurs de sortie. Si n n'est pas spécifié, la sortie standard (descripteur 1) est utilisée. Il s'agit d'une erreur de redirection si les chiffres du mot ne spécifient pas un descripteur de fichier ouvert en écriture. Si mot est évalué à -, le descripteur de fichier n est fermé. Dans le cas particulier où n est omis et où mot ne se développe pas en un ou plusieurs chiffres ou -, cela redirige les sorties standard et d'erreur standard comme décrit précédemment.

Déplacement de descripteurs de fichier

L'opérateur de redirection

[n]<&chiffre-

déplace le descripteur de fichier chiffre vers le descripteur de fichier n ou sur l'entrée standard (descripteur de fichier 0) si n n'est pas indiqué. chiffre est fermé après avoir été dupliqué en n.

De la même façon, l'opérateur de redirection

[n]>&chiffre-

déplace le descripteur de fichier chiffre vers le descripteur de fichier n ou sur la sortie standard (descripteur de fichier 1) si n n'est pas indiqué.

Ouverture en lecture/écriture d'un descripteur de fichier

L'opérateur de redirection

[n]<>mot

ouvre le fichier dont le nom résulte du développement du mot, à la fois en lecture et en écriture et lui affecte le descripteur de fichier n ou bien le descripteur 0 si n n'est pas mentionné. Si le fichier n'existe pas, il est créé.

ALIAS

Les alias permettent de substituer une chaîne à un mot qui est à une position dans l'entrée où il peut être le premier mot d'une commande simple. Les alias ont des noms et des valeurs correspondantes qui sont définis et supprimés à l'aide des commandes internes alias et unalias (consultez COMMANDES INTERNES DE L'INTERPRÉTEUR ci-dessous).

Si l'interpréteur lit un mot non protégé à la bonne position, il vérifie si le mot correspond à un nom d'alias. S'il correspond, l'interpréteur remplace le mot par la valeur de l'alias et lit cette valeur comme si elle avait été lue à la place du mot. L'interpréteur n'examine pas les caractères suivant le mot avant de tenter la substitution d'alias.

Les caractères /, $, ` et = et tout métacaractère de l'interpréteur ou caractère de protection décrits ci-dessus ne peuvent pas apparaître dans un nom d'alias. Le texte de remplacement peut contenir toute entrée valable pour l'interpréteur, y compris les métacaractères de l'interpréteur. L'interpréteur vérifie si le premier mot du texte de remplacement est à son tour un alias, mais un mot identique à un alias en cours de développement n'est pas développé une seconde fois. Cela signifie qu'on peut, par exemple, créer un alias ls valant ls -F et bash n'essaiera pas de développer récursivement le texte de substitution.

Si le dernier caractère de la valeur de l'alias est un blanc, l'interpréteur vérifie le prochain mot de commande suivant l'alias pour le développement d'alias.

Les alias sont créés et affichés avec la commande alias et supprimés avec la commande unalias.

Il n'existe pas de mécanisme permettant d'utiliser des arguments dans le texte de remplacement. S'ils sont nécessaires, utilisez plutôt une fonction de l'interpréteur (consultez FONCTIONS ci-dessous).

Les alias ne sont pas développés quand l'interpréteur n'est pas interactif sauf si l'option expand_aliases de l'interpréteur est créée en utilisant la commande shopt (consultez la description de shopt dans COMMANDES INTERNES DE L'INTERPRÉTEUR ci-dessous).

Les règles concernant la définition et l'utilisation des alias sont un peu confuses. bash lit toujours au moins une ligne d'entrée complètement et toutes les lignes qui composent une commande composée avant d'exécuter une des commandes de cette ligne ou la commande composée. Les alias sont développés lorsque la commande est lue et non pas lorsqu'elle est exécutée. Ainsi, une définition d'alias apparaissant sur la même ligne qu'une autre commande ne prend pas effet avant que l'interpréteur lise la ligne d'entrée suivante, et une définition d'alias dans une commande composée ne prend pas effet avant que l'interpréteur analyse et exécute la totalité de la commande composée. Une commande placée à la suite d'une définition d'alias sur la même ligne, ou dans le reste d'une commande composée, ne sera pas affectée par ce nouvel alias. Ce comportement est également important lors de l'exécution des fonctions. Les alias sont développés lorsque la définition de la fonction est lue et non pas lors de l'exécution de cette fonction, parce qu'une définition de fonction est elle-même une commande. Ainsi des alias définis dans une fonction ne sont pas disponibles avant la fin de l'exécution de la fonction. Pour plus de tranquillité, placez toujours les définitions d'alias sur des lignes isolées et n'utilisez jamais la commande alias dans les commandes composées.

Dans la plupart des situations, les fonctions de l'interpréteur de commandes sont préférables aux alias.

FONCTIONS

Une fonction de l'interpréteur, définie comme décrit ci-dessus dans GRAMMAIRE DE L'INTERPRÉTEUR, conserve une suite de commandes pour exécution ultérieure. Lorsque le nom d'une fonction de l'interpréteur est utilisé comme un simple nom de commande, l'interpréteur exécute la liste des commandes associées à ce nom de fonction. Les fonctions sont exécutées dans le contexte de l'interpréteur appelant ; aucun nouveau processus n'est créé pour les interpréter (à la différence d'un script).

Lorsqu'une fonction est exécutée, les arguments de la fonction deviennent les paramètres positionnels pendant son exécution. Le paramètre spécial # est mis à jour pour refléter les nouveaux paramètres positionnels. Le paramètre spécial 0 reste inchangé. Le premier élément de la variable FUNCNAME contient le nom de la fonction pendant son exécution.

Tous les autres aspects de l'environnement d'exécution de l'interpréteur sont identiques entre la fonction et son contexte d'appel, aux exceptions suivantes : les captures de DEBUG et RETURN (consultez la description de la commande interne trap dans COMMANDES INTERNES DE L'INTERPRÉTEUR ci-dessous) ne sont pas héritées, à moins que l'attribut trace ne soit positionné pour la fonction (consultez la description de la commande interne declare ci-dessous) ou que l'option d'interpréteur -o functrace n'ait été activée avec la commande interne set (auquel cas toutes les fonctions hériteront des captures de DEBUG et RETURN), et la capture de ERR n'est pas héritée à moins que l'option d'interpréteur -o errtrace n'ait été activée.

Les paramètres linguistiques régionaux des variables pour les fonctions sont déclarés avec la commande interne local (local variables). Normalement, les variables et leurs valeurs sont partagées entre la fonction et son contexte d'appel. Si une variable est déclarée local, la portée visible de la variable est restreinte à cette fonction et à ses enfants (y compris les fonctions qu'elle appelle).

Dans la description suivante, la portée actuelle est une fonction qui s'exécute actuellement. Les portées précédentes consistent en celles du contexte d'appel de la fonction et ainsi de suite, en remontant jusqu'à la portée “global” où l'interpréteur n'exécute aucune fonction de l'interpréteur. Une variable locale pour la portée actuelle est une variable déclarée avec les commandes internes local ou declare dans la fonction qui est exécutée actuellement.

Les variables locales masquent ( “shadow” ) les variables de même nom déclarées pour des portées précédentes. Par exemple, une variable locale déclarée dans une fonction masque des variables portant le même nom déclaré dans des portées précédentes, y compris des variables globales : les références et les affectations font référence à la variable locale, sans modifier les variables des portées précédentes. Quand la fonction rend la main, la variable globale est à nouveau visible.

L'interpréteur utilise les portées dynamiques pour contrôler la visibilité d'une variable dans les fonctions. Avec les portées dynamiques, les variables visibles et leurs valeurs sont le résultat d'une suite d'appels de fonction qui font que l'exécution atteint la fonction actuelle. La valeur de la variable vue par une fonction dépend de sa valeur dans son contexte d'appel, s'il existe, que le contexte d'appel soit de portée globale ou une autre fonction de l'interpréteur. C'est aussi la valeur qu'une déclaration de variable locale masque, et la valeur qui est restaurée quand la fonction rend la main.

Par exemple, si une variable var est déclarée comme locale dans la fonction fonc1, et que fonc1 appelle une autre fonction, fonc2, les références à var provenant de la fonc2 sont résolues à la valeur de la variable locale var provenant de la fonc1, masquant toute variable globale nommée var.

La commande interne unset fonctionne avec les mêmes portées dynamiques : si une variable est locale pour la portée actuelle, unset la détruit ; autrement, la destruction se réfère à la variable trouvée dans une portée d'appel comme décrit ci-dessus. Si une variable pour la portée locale actuelle est désactivée, elle reste ainsi (apparaissant comme détruite) jusqu'à ce qu'elle soit réinitialisée dans cette portée ou jusqu'à ce que la fonction rende la main. Une fois que la fonction a rendu la main, toute instance de la variable dans la portée antérieure devient visible. Si la désactivation agit sur une variable dans une portée antérieure, toute instance d'une variable de ce nom qui avait été masquée devient visible (voir plus loin comment l'option de l'interpréteur localvar_unset modifie ce comportement).

La variable FUNCNEST, si configurée à une valeur numérique strictement positive, définit le niveau maximal d'imbrication de fonctions. Les invocations de fonction qui dépassent la limite forcent toute la commande à abandonner.

Si la commande interne return est exécutée dans une fonction, celle-ci se termine et l'exécution reprend avec la commande suivant l'appel de fonction. Si return reçoit un argument numérique, celui-ci est le code de retour de la fonction ; sinon, le code de retour de la fonction est le code de retour de la dernière commande exécutée avant le return. Toute commande associée à la capture de RETURN est exécutée avant que l'exécution reprenne. Quand une fonction se termine, les valeurs des paramètres positionnels et du paramètre spécial # reprennent les valeurs qu'ils avaient avant l'appel de la fonction.

L'option -f des commandes internes declare ou typeset liste les noms et les définitions de fonctions. L'option -F de declare ou typeset n'affiche que les noms de fonction (et facultativement le fichier source et le numéro de ligne, si l'option d'interpréteur extdebug est activée). Les fonctions peuvent être exportées avec l'option -f de la commande interne export, afin d'être automatiquement définies dans les processus enfant de l'interpréteur (ceux créés lors de l'exécution d'un lancement séparé de l'interpréteur). L'option -f de la commande interne unset supprime une définition de fonction.

Les fonctions peuvent être récursives. La variable FUNCNEST peut être utilisée pour limiter la profondeur de la pile d'appels de la fonction et restreindre le nombre d'invocations de fonction. Par défaut, bash n'impose aucune limite au nombre d'appels récursifs.

ÉVALUATION ARITHMÉTIQUE

L'interpréteur permet, dans certaines circonstances, l'évaluation d'expressions arithmétiques (consultez les commandes internes let et declare, la commande composée ((, la commande arithmétique for, la commande conditionnelle [[ ainsi que Développement arithmétique).

L'évaluation est effectuée dans les plus grands entiers de longueur fixe disponibles, sans vérification du débordement. Néanmoins, la division par 0 est capturée et marquée comme une erreur. Les opérateurs, leur priorité, leur associativité et leur valeur sont identiques à ceux du langage C. La liste suivante d'opérateurs est groupée par opérateurs de niveaux de priorité identiques. Les niveaux sont listés par ordre de priorité décroissante.

post-incrément et post-décrément de variables
++id --id
pré-incrément et pré-décrément de variables
- +
moins et plus unaires
! ~
négations logique et binaire
**
exponentiation
* / %
multiplication, division, reste
+ -
addition, soustraction
<< >>
décalage arithmétique à gauche et à droite
<= >= < >
comparaisons
== !=
égalité et différence
&
ET binaire
^
OU exclusif binaire
|
OU binaire
&&
ET logique
||
OU logique
opérateur conditionnel
= *= /= %= += -= <<= >>= &= ^= |=
affectations
virgule

Les variables de l'interpréteur sont utilisables comme opérandes, le développement des paramètres étant effectué avant l'évaluation arithmétique. Dans une expression, les variables de l'interpréteur peuvent également être référencées par leur nom, sans utiliser la syntaxe de développement des paramètres. Cela signifie que vous pouvez utiliser « x », ou x est un nom de variable d'interpréteur, dans une expression arithmétique, l'interpréteur évaluera cette valeur comme une expression et utilisera le résultat. Une variable d'interpréteur qui est NULL ou inexistante est évaluée à 0 lorsqu'elle est référencée par son nom dans une expression.

La valeur d'une variable est évaluée comme une expression arithmétique lorsqu'elle est consultée, ou lorsqu'une valeur lui est affectée alors que son attribut integer (entier) a été positionné en utilisant declare -i. Une valeur NULL est évaluée à 0. Une variable d'interpréteur n'a donc pas besoin d'avoir son attribut integer positionné pour être utilisable dans un calcul.

Les constantes de type entier suivent la définition du langage C, sans suffixes ou constantes de caractères. Les constantes commençant par 0 sont interprétées comme des nombres octaux. Un en-tête 0x ou 0X indique une valeur hexadécimale. Sinon, les nombres ont la forme [base#]n où la base facultative est un nombre décimal entre 2 et 64 représentant la base arithmétique et n est un nombre exprimé dans cette base. Si la base# est omise, la base 10 est utilisée. En indiquant n, si un caractère non chiffre est requis, les chiffres supérieurs à 9 sont représentés par les lettres minuscules, les lettres capitales, le « @ » et le « _ », dans cet ordre. Si la base est inférieure ou égale à 36, les minuscules et les capitales sont interchangeables pour représenter les nombres entre 10 et 35.

Les opérateurs sont évalués par ordre de priorité. Les sous-expressions entre parenthèses sont évaluées en premier, ce qui permet d'outrepasser les règles de priorité ci-dessus.

EXPRESSIONS CONDITIONNELLES

Les expressions conditionnelles sont utilisées par la commande composée [[ et les commandes internes test et [ pour vérifier les attributs d'un fichier et effectuer des comparaisons arithmétiques ou sur des chaînes. Les commandes test et [ déterminent comment elles se comportent à partir du nombre d'arguments ; consultez la description de ces commandes pour toutes les autres actions spécifiques aux commandes.

Les expressions sont formées des primitives unaires ou binaires listées ci-dessous. Les expressions unaires sont souvent utilisées pour examiner l'état d'un fichier ou d'une variable d'interpréteur. Les opérateurs binaires sont utilisés pour des comparaisons de chaînes, de nombres et d'attributs de fichier.

bash gère plusieurs noms de fichier spécifiquement quand ils sont utilisés dans des expressions. Si le système d'exploitation sur lequel bash s'exécute fournit ces fichiers spéciaux, bash les utilise ; sinon, il les émule en interne avec ce comportement : si un argument de fichier d'une des primitives est de la forme /dev/fd/n, alors bash vérifie le descripteur de fichier n. Si l'argument de fichier d'une des primitives est /dev/stdin, , /dev/stdout ou /dev/stderr, bash vérifie respectivement les descripteurs de fichier 0, 1 ou 2.

Sauf indication contraire, les primitives relatives aux fichiers suivent les liens symboliques et opèrent sur la cible du lien plutôt que sur le lien lui-même.

Lorsqu'ils sont utilisés avec [[, ou quand l'interpréteur est en mode posix, les opérateurs < et > trient de façon lexicographique en utilisant les paramètres linguistiques régionaux actuels. Quand l'interpréteur n'est pas en mode posix, la commande test trie en utilisant l'ordre ASCII.

Vrai si le fichier existe.
Vrai si le fichier existe et est un fichier spécial bloc.
Vrai si le fichier existe et est un fichier spécial caractère.
Vrai si le fichier existe et est un répertoire.
Vrai si le fichier existe.
Vrai si le fichier existe et est un fichier normal.
Vrai si le fichier existe et a son bit Set-GID positionné.
Vrai si le fichier existe et est un lien symbolique.
Vrai si le fichier existe et son “sticky” bit est positionné.
Vrai si le fichier existe et est un tube nommé (FIFO).
Vrai si le fichier existe et est accessible en lecture.
Vrai si le fichier existe et a une taille strictement positive.
Vrai si le descripteur de fichier df est ouvert et se rapporte à un terminal.
Vrai si le fichier existe et a son bit Set-UID positionné.
Vrai si le fichier existe et est accessible en écriture.
Vrai si le fichier existe et est exécutable.
Vrai si le fichier existe et appartient au GID effectif du groupe.
Vrai si le fichier existe et est un lien symbolique.
Vrai si le fichier existe et a été modifié depuis son dernier accès.
Vrai si le fichier existe et appartient à l'UID effectif de l'utilisateur.
Vrai si le fichier existe et est un socket.
Vrai si l'option d'interpréteur nom_opt est activée. Consultez la liste des options ci-dessous dans la description de l'option -o de la commande interne set.
Vrai si la variable nom_de_variable de l'interpréteur est configurée (si une valeur lui a été assignée). Si nom_de_variable est un nom de variable indicé par @ ou * de tableau indicé, vrai est renvoyé si le tableau contient des éléments définis. Si nom_de_variable est un nom de variable indicé par @ ou * de tableau associatif, vrai est renvoyé si un élément avec cette clé est défini.
Vrai si la variable nom_de_variable de l'interpréteur est configurée et est une référence de nom.
Vrai si la longueur de la chaîne est nulle.
Vrai si la longueur de la chaîne est non nulle.
Vrai si les deux chaînes sont égales. Le symbole = doit être utilisé avec la commande test pour être en conformité POSIX . Utilisée avec la commande [[, cela réalise une correspondance de motif tel que décrit précédemment (Commandes composées).
Vrai si les deux chaînes sont différentes.
Vrai si la chaîne_1 se trouve avant la chaîne_2 dans l'ordre lexicographique.
Vrai si la chaîne_1 se trouve après la chaîne_2 dans l'ordre lexicographique.
fichier_1 -ef fichier_2
Vrai si le fichier_1 et le fichier_2 font référence au même périphérique et ont les mêmes numéros d'inœuds.
Vrai si le fichier_1 est plus récent que le fichier_2 (selon les dates de dernière modification) ou si le fichier_1 existe et pas le fichier_2.
Vrai si le fichier_1 est plus ancien que le fichier_2 ou si le fichier_2 existe et pas le fichier_1.
OP est l'un des opérateurs suivants -eq, -ne, -lt, -le, -gt ou -ge. Ces opérateurs arithmétiques binaires renvoient vrai si arg1 est respectivement égal, différent, inférieur, inférieur ou égal, supérieur, supérieur ou égal à arg2. arg1 et arg2 peuvent être des entiers positifs ou négatifs. Lorsqu'ils sont utilisés avec la commande [[, arg1 et arg2 sont évalués comme des expressions arithmétiques (consultez ÉVALUATION ARITHMÉTIQUE ci-dessus). Comme les développements que la commande [[ effectue sur arg1 et arg2 peuvent potentiellement aboutir à des chaînes vides, l'évaluation d'expression arithmétique les traite comme des expressions qui s'évaluent à 0.

DÉVELOPPEMENT DES COMMANDES SIMPLES

Lorsque l'interpréteur exécute une commande simple, il effectue les développements, affectations et redirections suivantes, de gauche à droite dans l'ordre suivant :

1.
Les mots que l'analyseur a repérés comme affectations de variable (ceux qui précèdent le nom de la commande) et les redirections sont conservés pour un traitement ultérieur.
2.
Les mots qui ne sont ni des affectations de variable ni des redirections sont développés. S'il reste des mots après le développement, le premier mot est considéré comme le nom d'une commande et les suivants comme ses arguments.
3.
Les redirections sont effectuées comme décrit ci-dessus dans REDIRECTIONS.
4.
Le texte suivant le signe = de chaque affectation de variable est sujet au développement du tilde, des paramètres, à la substitution de commande, au développement arithmétique et à la suppression des protections avant d'être affecté à la variable.

Si aucun nom de commande ne résulte des précédentes opérations, les affectations de variable modifient l'environnement actuel de l'interpréteur. Dans le cas de commandes de ce type (celles qui consistent uniquement en affectations et en redirections), les affectations sont effectuées avant les redirections. Sinon les variables sont ajoutées à l'environnement de la commande exécutée et n'affectent pas l'environnement de l'interpréteur actuel. Si l'une des tentatives d'affectation concerne une variable en lecture seule, une erreur se produit et la commande termine avec un code de retour différent de zéro.

Si aucun nom de commande n'est obtenu, les redirections sont effectuées mais ne modifient pas l'environnement de l'interpréteur actuel. Une erreur de redirection conduit à la terminaison de la commande avec un code de retour différent de zéro.

S'il reste un nom de commande après le développement, l'exécution a lieu comme décrit ci-dessous. Sinon la commande termine. Si l'un des développements contient une substitution de commande, le code de retour de la commande est le code de retour de la dernière substitution de commande effectuée. S'il n'y avait aucune substitution de commande, la commande termine avec un état de zéro.

EXÉCUTION DES COMMANDES

Après le découpage de la ligne de commande en mots, si le résultat est une commande simple suivie d'une liste facultative d'arguments, l'interpréteur effectue les actions suivantes.

Si le nom de la commande ne contient aucune barre oblique, l'interpréteur tente de la localiser. S'il existe une fonction de l'interpréteur de ce nom, elle est appelée comme nous l'avons vu ci-dessus dans FONCTIONS. Si le nom n'est pas celui d'une fonction, l'interpréteur le recherche dans la liste des commandes internes. Si une correspondance est trouvée, cette commande interne est appelée.

Si le nom n'est ni celui d'une fonction de l'interpréteur, ni celui d'une commande interne et s'il ne contient pas de barre oblique, bash va chercher dans chacun des éléments de PATH un répertoire contenant un fichier exécutable du nom désiré. bash utilise une table de hachage pour mémoriser les chemins d'accès complets aux fichiers exécutables (consultez la commande hash dans COMMANDES INTERNES DE L'INTERPRÉTEUR ci-dessous). bash n'effectue une recherche complète dans les répertoires du PATH que si la commande ne se trouve pas dans la table de hachage. Si la recherche est infructueuse, l'interpréteur recherche une fonction de l'interpréteur appelée command_not_found_handle. Si cette fonction existe, elle est appelée dans un environnement d'exécution séparé avec la commande d'origine et comme arguments les arguments de celle-ci, et le code de retour de la fonction devient celui de ce sous-interpréteur. Si cette fonction n'est pas définie, l'interpréteur affiche un message d'erreur et renvoie un code de retour de 127.

Si la recherche réussit ou si le nom de la commande contient une ou plusieurs barres obliques, l'interpréteur exécute le programme demandé dans un environnement d'exécution distinct. L'argument 0 est configuré au nom indiqué et les éventuels arguments restants de la commande sont configurés aux arguments indiqués.

Si cette exécution échoue parce que le programme n'est pas un exécutable et si le fichier n'est pas un répertoire, il est pris pour un script, un fichier contenant des commandes d'interpréteur, et l'interpréteur crée une nouvelle instance de lui-même pour exécuter ce script. bash essaye de déterminer si le fichier est un fichier texte ou un binaire et n'exécutera pas les fichiers qu'il détermine comme des binaires. Ce sous-interpréteur se réinitialisera lui-même, comme si un nouvel interpréteur avait été appelé pour exécuter le script, excepté qu'il continuera à mémoriser l'emplacement des commandes connues de son parent (consultez hash dans COMMANDES INTERNES DE L'INTERPRÉTEUR ci-dessous).

Si le programme est un fichier commençant par #!, le reste de la première ligne indique un interprète pour ce programme. L'interpréteur se chargera d'exécuter l'interprète indiqué sur les systèmes d'exploitation qui ne gèrent pas eux-mêmes ce format d'exécutable. Les arguments de l'interprète consistent en un seul argument facultatif fourni sur la première ligne du fichier à la suite du nom de l'interprète, suivi du nom du programme, suivi des arguments de la commande s'il y en a.

ENVIRONNEMENT D'EXÉCUTION DES COMMANDES

L'interpréteur possède un environnement d'exécution consistant en l'ensemble des éléments suivants :

–
les fichiers ouverts hérités par l'interpréteur à son appel et modifiés par les redirections fournies à la commande interne exec ;
–
le répertoire de travail actuel comme configuré par cd, pushd ou popd ou hérité par l'interpréteur à son appel ;
–
le masque de création de fichier comme configuré par umask ou hérité du parent de l'interpréteur ;
–
les captures actuelles configurées par trap ;
–
les paramètres de l'interpréteur configurés par des affectations de variables ou avec la commande interne set, ou hérités de l'environnement du parent de l'interpréteur ;
–
les fonctions de l'interpréteur définies lors de l'exécution ou héritées de l'environnement du parent de l'interpréteur ;
–
les options activées à l'appel (par défaut ou avec les arguments de ligne de commande) ou par set ;
–
les options activées par shopt ;
–
les alias de l'interpréteur définis par la commande alias ;
–
les ID des divers processus, y compris ceux des tâches en arrière-plan, la valeur de $$ et la valeur de PPID.

Lorsqu'une commande différente d'une commande interne ou d'une fonction de l'interpréteur doit être exécutée, elle est appelée dans un environnement d'exécution séparé constitué de ce qui suit. Sauf indication contraire, les valeurs sont héritées de l'environnement de l'interpréteur :

–
les fichiers ouverts de l'interpréteur, ainsi que toutes les modifications et ajouts précisés par les redirections de la commande ;
–
le répertoire de travail actuel ;
–
le masque de création de fichiers ;
–
les variables et les fonctions de l'interpréteur marquées pour l'exportation, ainsi que les variables exportées spécialement pour la commande ;
–
les captures interceptées par l'interpréteur sont réinitialisées aux valeurs héritées de l'interpréteur parent et les captures ignorées par l'interpréteur restent ignorées.

Une commande appelée dans un environnement distinct ne peut pas affecter l'environnement d'exécution de l'interpréteur.

Un sous-interpréteur est une copie du processus de l'interpréteur.

Les substitutions de commande, les commandes groupées entre parenthèses et les commandes asynchrones sont appelées dans un environnement de sous-interpréteur qui est une copie de celui de l'interpréteur, mais les captures interceptées par l'interpréteur sont réinitialisées aux valeurs que l'interpréteur avait héritées de son parent à son appel. Les commandes internes appelées dans un pipeline, sauf éventuellement dans le dernier élément en fonction de la valeur de l'option d'interpréteur lastpipe sont aussi exécutées dans un environnement de sous-interpréteur. Les modifications apportées à l'environnement d'un sous-interpréteur n'affectent aucunement l'environnement d'exécution de l'interpréteur.

Quand l'interpréteur est en mode posix, les sous-interpréteurs engendrés pour exécuter les substitutions de commande héritent de la valeur de l'option -e de leur interpréteur parent. En dehors du mode posix, bash enlève l'option -e de tels sous-interpréteurs. Consultez la description de l'option d'interpréteur inherit_errexit ci-dessous pour savoir comment contrôler ce comportement en dehors du mode posix.

Si une commande est suivie d'un & et que le contrôle des tâches n'est pas actif, l'entrée standard par défaut de la commande est le fichier vide /dev/null. Sinon, la commande appelée hérite des descripteurs de fichier de l'interpréteur appelant comme modifiés par les redirections.

ENVIRONNEMENT

Quand un programme est appelé, il reçoit un tableau de chaînes que l'on appelle environnement. Il s'agit d'une liste de couples nom-valeur, de la forme nom=valeur.

L'interpréteur fournit plusieurs façons de gérer l'environnement. Au démarrage, l'interpréteur analyse son propre environnement et crée un paramètre pour chaque nom trouvé, en le marquant comme exportable vers les processus enfants. Les commandes exécutées héritent de cet environnement. Les commandes export, declare -x et unset modifient l'environnement en ajoutant et supprimant des paramètres et des fonctions. Si la valeur d'un paramètre de l'environnement est modifiée, la nouvelle valeur devient automatiquement une partie de l'environnement et elle remplace l'ancienne. L'environnement hérité par toute commande exécutée est l'environnement initial de l'interpréteur, dont les valeurs peuvent être modifiées dans l'interpréteur, sans les éléments supprimés par la commande unset, et avec les éléments ajoutés par les commandes export et declare -x.

Si des affectations de paramètres, telles que décrites dans PARAMÈTRES, apparaissent avant une commande simple, les affections de variables font partie de l'environnement de cette commande aussi longtemps qu'elle s'exécute. Ces instructions d'affectation affectent seulement l'environnement vu par cette commande. Si ces affectations précèdent un appel à une fonction de l'interpréteur, les variables sont locales à la fonction et exportées vers les enfants de cette fonction.

Si l'option -k est configurée (consultez ci-dessous la commande interne set), alors toutes les affectations de paramètres sont placées dans l'environnement d'une commande et pas seulement celles qui précèdent son nom de comande.

Quand bash appelle une commande externe, la variable _ est configurée en chemin d'accès complet à cette commande et elle est transmise dans l'environnement.

CODE DE RETOUR

Le code de retour d'une commande exécutée est la valeur renvoyée par l'appel système waitpid ou une fonction équivalente. Les codes de retour ont une valeur entre 0 et 255, néanmoins, comme expliqué ci-dessous, l'interpréteur peut utiliser les valeurs supérieures à 125 de façon particulière. Les codes de retour des commandes internes et composées sont également limités à cet intervalle. Sous certaines conditions, l'interpréteur utilisera des valeurs particulières pour indiquer des modes d'échec particuliers.

Dans le cadre de l'interpréteur, une commande qui termine avec un code de retour valant zéro a réussi. Ainsi, tandis qu'un code de retour de zéro indique le succès, un code de retour différent de zéro indique un échec.

Quand une commande se termine par un signal fatal N, bash utilise la valeur 128+N comme code de retour.

Si une commande n'est pas trouvée, le processus enfant créé pour l'exécuter renvoie le code 127. Si une commande est trouvée mais pas exécutable, la valeur renvoyée est 126.

Si une commande échoue à cause d'une erreur survenue lors d'un développement ou des redirections, le code de retour est strictement plus grand que zéro.

Les commandes internes renvoient un état de 0 (vrai) en cas de succès et une valeur différente de zéro (faux) si une erreur se produit pendant leur exécution. Toutes les commandes internes renvoient un code de retour de 2 pour indiquer un usage incorrect, en général des options non valables ou des arguments manquants.

Le code de retour de la dernière commande est disponible dans le paramètre spécial $?.

bash lui-même renvoie le code de retour de la dernière commande exécutée, à moins qu'une erreur de syntaxe ne se produise, auquel cas il termine avec une valeur différente de zéro. Consultez aussi ci-dessous la commande interne exit.

SIGNAUX

Quand bash fonctionne de façon interactive, en absence de toute capture, il ignore SIGTERM (c'est ainsi que kill 0 ne tue pas un interpréteur interactif), il intercepte et gère SIGINT (c'est ainsi que la commande interne wait est interruptible). Quand bash reçoit SIGINT, il sort de toute boucle en cours d'exécution. Dans tous les cas, bash ignore SIGQUIT. Si le contrôle des tâches est actif, bash ignore SIGTTIN, SIGTTOU et SIGTSTP.

La commande interne trap modifie la gestion de signal de l'interpréteur, comme décrit ci-dessous.

Les commandes externes que bash exécute ont les gestionnaires de signaux configurés aux valeurs héritées par l'interpréteur de son parent, sauf si trap les configure pour qu'ils soient ignorés auquel cas le processus enfant les ignore aussi. Quand le contrôle des tâches n'est pas actif, les tâches en arrière-plan ignorent les signaux SIGINT et SIGQUIT en plus des gestionnaires hérités. Les commandes exécutées en tant que résultat d'une substitution de commande ignorent les signaux de contrôle de tâches SIGTTIN, SIGTTOU et SIGTSTP émis par le clavier.

Par défaut, l'interpréteur termine à la réception de SIGHUP. Avant de terminer, un interpréteur interactif renvoie le SIGHUP à toutes les tâches en cours ou suspendues. L'interpréteur envoie SIGCONT aux tâches suspendues pour s'assurer qu'elles reçoivent bien le SIGHUP (consultez CONTRÔLE DES TÂCHES ci-dessous pour plus d'informations sur les tâches en cours ou suspendues). Pour empêcher l'interpréteur d'envoyer le signal à une tâche particulière, supprimez-la de la table des tâches avec la commande interne disown (consultez COMMANDES INTERNES DE L'INTERPRÉTEUR ci-dessous) ou marquez-la comme exemptée de SIGHUP en utilisant disown -h.

Si l'option d'interpréteur huponexit a été configurée en utilisant la fonction shopt, bash envoie un signal SIGHUP à toutes les tâches lorsqu'un interpréteur de commandes de connexion interactif termine.

Lorsque bash attend qu'une commande se termine et qu'il reçoit un signal pour lequel une capture a été configurée, il n'exécutera pas la capture tant que la commande n'est pas terminée. Si bash attend la fin d'une commande asynchrone au moyen de la commande interne wait, et qu'il reçoit un signal pour lequel une capture a été configurée, la commande interne wait rendra la main immédiatement avec un code de retour supérieur à 128, à la suite de quoi l'interpréteur exécute immédiatement la capture.

Quand le contrôle des tâches n'est pas activé, et que bash est dans l'attente de l'achèvement d'une commande au premier plan, l'interpréteur reçoit les signaux émis par le clavier comme SIGINT (généralement créé par ^C) que l'utilisateur a généralement l'intention d'envoyer à cette commande. Cela se produit parce que l'interpréteur et la commande sont dans le même groupe de processus que le terminal, et ^C) envoie un SIGINT à tous les processus de ce groupe de processus. Dans la mesure où bash n'active pas par défaut le contrôle des tâches quand l'interpréteur n'est pas interactif, ce scénario est plus fréquent dans les interpréteurs non interactifs.

Quand le contrôle des tâches est activé, et que bash est dans l'attente de l'achèvement d'une commande au premier plan, l'interpréteur ne reçoit pas les signaux émis par le clavier parce qu'il n'est pas dans le même groupe de processus que le terminal. Ce scénario est plus fréquent dans les interpréteurs interactifs où bash tente d'activer le contrôle des tâches par défaut. Consultez CONTRÔLE DES TÂCHES ci-dessous pour plus d'informations sur les groupes de processus.

Quand le contrôle de tâche n'est pas activé et que bash reçoit un SIGINT pendant qu'il attend une commande au premier plan, il attend jusqu'à ce que la commande au premier plan s'achève et décide ensuite que faire du SIGINT :

1.
Si la commande termine du fait du SIGINT, bash conclut que l'utilisateur a l'intention d'envoyer également le SIGINT à l'interpréteur et réagit au SIGINT (par exemple en exécutant une capture de SIGINT, en quittant un interpréteur non interactif ou en revenant au niveau supérieur pour lire une nouvelle commande).
2.
Si la commande ne se termine pas du fait du SIGINT, le programme a géré le SIGINT lui-même et ne l'a pas traité comme un signal fatal. Dans ce cas bash ne traite pas le SIGINT comme un signal fatal, en supposant plutôt soit que le SIGINT était utilisé comme un élément du déroulement normal du programme (par exemple, emacs l'utilise pour interrompre des commandes d'édition) ou était abandonné délibérément. Néanmoins, bash exécutera toute capture définie par SIGINT, comme il le fait pour tout autre signal capturé reçu pendant qu'il attend que la commande au premier plan s'achève, pour des raisons de compatibilité

Quand le contrôle de tâches est activé, bash ne reçoit pas les signaux émis par le clavier comme SIGINT pendant qu'il attend une commande au premier plan. Un interpréteur interactif ne prête pas attention au SIGINT, même si la commande au premier plan se termine en conséquence, si ce n'est pour noter son code de retour. Si l'interpréteur n'est pas interactif et que la commande au premier plan se termine du fait du SIGINT, bash fait semblant d'avoir reçu le SIGINT lui-même (scénario 1 ci-dessus), pour des raisons de compatibilité.

CONTRÔLE DES TÂCHES

Le contrôle des tâches se réfère à la capacité de suspendre (suspend) sélectivement l'exécution d'un processus et de la reprendre (resume) ultérieurement. L'utilisateur bénéficie généralement de cette possibilité grâce à l'action conjointe du pilote de terminal du noyau de système d'exploitation et de bash.

L'interpréteur associe une tâche à chaque pipeline. Il maintient une table des tâches en cours d'exécution que la commande jobs affichera. Chaque tâche porte un numéro_de_tâche que jobs affiche entre crochets. Les numéros de tâche commencent à 1. Quand bash lance une tâche de façon asynchrone (en arrière-plan), il affiche une ligne qui ressemble à :

[1] 25647

Cette ligne indique que cette tâche est la tâche numéro 1 et que le PID du dernier processus dans le pipeline associé à cette tâche est 25647. Tous les processus d'un même pipeline font partie de la même tâche. bash utilise la notion de tâche comme base du contrôle des tâches.

Pour faciliter l'implémentation d'une interface utilisateur pour le contrôle de tâches, chaque processus possède un ID de groupe de processus et le système d'exploitation conserve la notion d'ID de groupe de processus associés au terminal actuel. Cet ID de groupe de processus associés à un terminal est associé au terminal de contrôle.

Les processus qui ont le même ID de groupe de processus sont considérés comme faisant partie du même groupe de processus. Les membres du groupe de processus au premier plan (processus dont l'ID de groupe de processus est égal à l'ID de groupe de processus du terminal actuel) reçoivent les signaux émis par le clavier comme SIGINT. Les processus dans le groupe de processus au premier plan sont dits processus au premier plan. Les processus en arrière-plan sont ceux dont l'ID de groupe de processus diffère de celui du terminal de contrôle ; ils sont insensibles aux signaux émis par le clavier. Seuls les processus au premier plan peuvent lire depuis le terminal de contrôle ou, si l'utilisateur l'indique avec “stty tostop”, y écrire. Le système envoie le signal SIGTTIN (SIGTTOU) aux processus en arrière-plan qui tentent de lire à partir du terminal (ou d'écrire vers lui quand “tostop” est effectif) ce qui, sauf s'il est capturé, suspend le processus.

Si le système d'exploitation sur lequel bash fonctionne permet le contrôle des tâches, bash fournit des outils pour l'utiliser. La frappe d'un caractère de suspension (généralement *Z, Contrôle-Z) pendant l'exécution d'un processus suspend celui-ci et redonne la main à bash. La frappe d'un caractère de suspension différée (généralement ^Y, Contrôle-Y) interrompt le processus au moment où il tente de lire des saisies depuis le terminal et rend la main à bash. L'utilisateur manipule alors l'état de cette tâche en utilisant la commande bg (background = arrière-plan) pour en continuer l'exécution en arrière-plan, la commande fg (foreground = premier plan) pour la continuer au premier plan ou encore la commande kill pour la tuer. Le caractère de suspension s'applique immédiatement et a pour effet de bord d'éliminer les sorties et saisies en attente. Pour forcer un processus en arrière-plan à s'arrêter, ou pour stopper un processus qui n'est pas associé à la session actuelle du terminal, il faut lui envoyer le signal SIGSTOP avec kill.

Il existe plusieurs façons de faire référence à une tâche dans l'interpréteur. Le caractère % introduit une spécification de tâche (jobspec).

Il est possible de faire référence à la tâche numéro n avec %n. Il est également possible de faire référence à une tâche en utilisant un préfixe du nom utilisé pour la lancer ou une sous-chaîne qui apparaît dans sa ligne de commande. Par exemple, %ce fait référence à une tâche dont le nom de commande commence par ce. Utiliser %?ce, d'un autre côté, fait référence à toute tâche contenant la chaîne ce dans sa ligne de commande. Si le préfixe ou la sous-chaîne correspondent à plusieurs tâches, bash signale une erreur.

Les symboles %% et %+ font référence à la notion de tâche actuelle de l'interpréteur. Un simple % (non accompagné de spécification de tâche) fait également référence à la tâche actuelle. %- fait référence à la tâche précédente. Quand une tâche démarre en arrière-plan, qu'une tâche s'arrête alors qu'elle est au premier plan, ou qu'une tâche reprend en arrière-plan, elle devient la tâche actuelle. La tâche qui était la tâche actuelle devient la tâche précédente. Lorsque la tâche actuelle se termine, la tâche précédente devient la tâche actuelle. Si une seule tâche existe, %+ et %- peuvent tous deux être utilisés pour faire référence à cette tâche. Dans les affichages faisant référence aux tâches (par exemple la sortie de la commande jobs), la tâche actuelle est toujours annotée d'un + et la tâche précédente d'un -.

Il suffit de nommer une tâche pour la ramener au premier plan : %1 est synonyme de “fg %1”, et ramène la tâche 1 de l'arrière-plan vers le premier plan. De même, “%1 &” reprend la tâche 1 en arrière-plan, de façon équivalente à “bg %1”.

L'interpréteur est immédiatement prévenu lorsqu'une tâche change d'état. Normalement bash attend d'être prêt à afficher son interpréteur avant de signaler à l'utilisateur des changements dans l'état des tâches, afin de ne pas interrompre toute autre sortie, bien qu'il notifie les changements d'état d'une tâche après l'achèvement d'une commande au premier plan dans une liste, avant l'exécution de la tâche suivante de la liste. Si l'option -b de la commande interne set est activée, bash signale les changements d'état immédiatement. bash exécute toute capture de SIGCHLD pour chaque enfant qui se termine.

Quand une tâche s'achève et que bash en informe l'utilisateur, bash retire la tâche de la table. Elle n'apparaîtra plus dans la sortie de jobs, mais wait rapportera son code de sortie pourvu qu'on lui fournisse en argument le PID associé à la tâche. Quand la table est vide, les numéros de tâche commencent à 1.

Si un utilisateur tente de terminer bash alors que des tâches sont suspendues (ou, si l'option d'interpréteur checkjobs a été activée par la commande interne shopt, en cours d'exécution), l'interpréteur affiche un message d'avertissement, et, si l'option d'interpréteur checkjobs est activée, affiche la liste des tâches et leur état. La commande jobs peut alors être utilisée pour examiner leur état. Si l'utilisateur tente immédiatement une deuxième fois de terminer sans commande intercalaire, bash n'affiche aucun autre avertissement et met fin à toutes les tâches arrêtées.

Lorsque l'interpréteur est dans l'attente d'une tâche ou d'un processus utilisant la commande interne wait et que le contrôle des tâches est activé, wait rendra la main quand la tâche changera d'état. L'option -f fera que wait attendra que la tâche ou le processus se termine avant de rendre la main.

INVITES

Quand il est exécuté de façon interactive, bash affiche l'invite de base PS1 dès qu'il est prêt à lire une commande et l'invite secondaire PS2 quand il a besoin de plus de saisies pour exécuter une commande.

bash examine la valeur de la variable de tableau PROMPT_COMMAND juste avant d'afficher chaque invite de base. Si des éléments dans PROMPT_COMMAND sont définis et non NULL, bash exécute chaque valeur, par ordre numérique, de la même manière que si elle avait été saisie sur la ligne de commande. bash affiche PS0 après avoir lu une commande, mais avant de l'exécuter.

bash affiche PS4 comme décrit ci-dessus avant de tracer chaque commande quand l'option -x est activée.

bash permet de personnaliser les chaînes d'invite PS0, PS1, PS2 et PS4 en insérant un certain nombre de caractères spéciaux protégés par des contre-obliques qui sont décodés comme suit :

un caractère ASCII d'alarme (07) ;
la date au format “Weekday Month Date” (par exemple, “Tue May 26”).
le format est passé à strftime(3) et le résultat est inséré dans la chaîne de l'invite ; un format vide implique une représentation du temps spécifique aux paramètres linguistiques régionaux. Les accolades sont nécessaires ;
un caractère de protection ASCII (033) ;
le nom de la machine, jusqu'au premier point “.”.
le nom de la machine ;
le nombre de tâches actuellement gérées par l'interpréteur ;
le nom de base du nom de périphérique de terminal de l'interpréteur (par exemple, “ttys0”).
un changement de ligne ;
un retour chariot ;
le nom de l'interpréteur, c'est-à-dire le nom de base de $0 (la portion suivant la dernière barre oblique) ;
l'heure actuelle au format HH:MM:SS sur 24 heures ;
l'heure actuelle au format HH:MM:SS sur 12 heures ;
\@
l'heure actuelle au format HH:MM sur 12 heures ;
l'heure actuelle au format HH:MM sur 24 heures ;
le nom de l'utilisateur ;
la version de bash (par exemple, 2.00) ;
le numéro de version complet (avec niveau de correctifs) de bash, (par exemple, 2.00.0) ;
la valeur de la variable PWD de l'interpréteur ($PWD), avec $HOME abrégé en tilde « ~ » (utilise la valeur de la variable PROMPT_DIRTRIM) ;
le nom de base (basename) de $PWD, avec $HOME abrégé en tilde (« ~ ») ;
\!
le numéro d'historique de la commande ;
\#
le numéro de la commande ;
\$
# si l'UID effectif est 0, $ sinon ;
le caractère correspondant au code octal nnn ;
\\
une contre-oblique ;
\[
début d'une suite de caractères non imprimables qui peuvent être utilisés pour inclure une suite de caractères de contrôle du terminal dans l'interpréteur ;
\]
fin d'une suite de caractères non imprimables.

Le numéro de commande et le numéro d'historique sont généralement différents : le numéro d'historique d'une commande correspond à sa position dans la file d'historique qui peut contenir des commandes restaurées à partir de cette liste (consultez HISTORIQUE ci-dessous), alors que le numéro de commande est simplement une position dans la suite de commandes exécutées depuis le début de la session d'interpréteur actuelle. Après que la chaîne a été décodée, elle est soumise au développement des paramètres, à la substitution de commande, au développement arithmétique, au découpage en mots et à la suppression des protections, selon la valeur de l'option d'interpréteur promptvars (consultez la description de shopt dans COMMANDES INTERNES DE L'INTERPRÉTEUR ci-dessous). Cela peut avoir des effets non désirés si des portions protégées de la chaîne apparaissent à l'intérieur de la substitution de commande ou contiennent des caractères spéciaux pour le développement de mots.

READLINE

C'est la bibliothèque qui gère la lecture des saisies lors des sessions interactives de l'interpréteur, à moins que l'option --noediting ne soit fournie à l'appel de l'interpréteur. L'édition de ligne est aussi utilisée lors de l'utilisation de l'option -e de la commande interne read. Par défaut les commandes d'édition de ligne sont similaires à celles d'emacs ; une interface d'édition de ligne dans le style vi est aussi disponible. L'édition de ligne peut être activée à tout moment en utilisant les options -o emacs ou -o vi de la commande interne set (consultez COMMANDES INTERNES DE L'INTERPRÉTEUR ci-dessous). Pour arrêter l'édition de ligne après le démarrage de l'interpréteur, utiliser l'option +o emacs ou +o vi de la commande interne set.

Notation readline

Ce paragraphe utilise les concepts d'édition de style Emacs et utilise sa notation pour les frappes de touches. Les touches Contrôle sont notées C-touche, par exemple C-n signifie Contrôle-N. De même, les touches Méta sont notées par M-touche, ainsi M-x signifie Méta-X. La touche Méta est souvent étiquetée “Alt” ou “Option”.

Sur les claviers sans touches Méta, M-x signifie ESC x, c'est-à-dire presser et relâcher successivement la touche d'Échappement puis la touche x. Cela fait de ESC le préfixe méta. La combinaison M-C-x signifie ESC-Contrôle-x : presser et relâcher la touche d'Échappement puis presser et maintenir la touche Contrôle enfoncée tout en pressant la touche x, puis les relâcher toutes les deux.

Sur certains claviers, la touche de modificateur Méta produit des caractères avec le huitième bit (0200) défini. Vous pouvez utiliser la variable enable-meta-key pour activer ou non cette possibilité, si le clavier le permet. Sur beaucoup d'autres claviers, le terminal ou l'émulateur de terminal convertit la touche précédée de Méta en une séquence de touches débutant par ESC comme décrit dans le paragraphe précédent.

Si votre touche Méta produit une séquence de touches avec le préfixe méta ESC, vous pouvez faire que le raccourci clavier M-touche (voir Raccourcis clavier readline) fasse la même chose en définissant la variable force-meta-prefix.

Les commandes readline peuvent recevoir des arguments numériques, qui fonctionnent en règle générale comme compteurs de répétitions. Parfois, cependant, c'est le signe de l'argument qui est significatif. L'utilisation d'un argument négatif pour une commande agissant dans un sens donné (par exemple kill-line) fait agir cette commande dans la direction opposée. Les commandes dont le comportement avec les arguments diffère de cela sont indiquées ci-dessous.

Le curseur (« point ») correspond à la position actuelle du curseur et la marque correspond à une position de curseur sauvegardée. Le texte entre le curseur et la marque est désigné comme la zone. readline possède le concept de zone active : quand la zone est active, l'affichage de readline met en surbrillance la zone en utilisant la valeur de la variable active-region-start-color. La variable enable-active-region active ou désactive cette fonction. Plusieurs commandes rendent la zone active ; elles sont notées ci-dessous.

Lorsqu'une commande est indiquée comme détruisant du texte, le texte effacé est en fait sauvegardé pour une éventuelle récupération ultérieure (« yanking »). Il est conservé dans un tampon circulaire (« kill ring »). Les effacements successifs accumulent le texte en un seul bloc qui peut être récupéré en une fois. Les commandes non destructives séparent les blocs de texte dans le tampon circulaire.

Initialisation de readline

readline est personnalisé en plaçant des commandes dans un fichier d'initialisation (le fichier inputrc). Le nom de ce fichier est pris dans la variable de l'interpréteur INPUTRC. Si cette variable est inexistante, le nom par défaut est ~/.inputrc. Si ce fichier n'existe pas ou s'il ne peut pas être lu, readline cherche le fichier /etc/inputrc. Lorsqu'un programme utilisant la bibliothèque readline démarre, readline lit le fichier d'initialisation et les raccourcis clavier et les variables sont mis en place avant de lire toute entrée de l'utilisateur.

Seules quelques constructions élémentaires sont autorisées dans le fichier inputrc). Les lignes blanches sont ignorées. Les lignes commençant par # sont des commentaires. Les lignes commençant par $ indiquent des constructions conditionnelles. Les autres lignes indiquent des raccourcis clavier et des paramétrages de variables.

Les raccourcis clavier par défaut peuvent être modifiés par des commandes de raccourcis clavier dans le fichier inputrc. Les programmes qui utilisent la bibliothèque readline, y compris bash peuvent ajouter leurs propres commandes et raccourcis.

Par exemple, en plaçant

M-Control-u: universal-argument

ou
C-Meta-u: universal-argument

dans le fichier inputrc, fera que la séquence de touches M-C-u exécutera la commande readline universal-argument.

Les raccourcis clavier peuvent contenir les caractères symboliques suivants : DEL, ESC, ESCAPE, LFD, NEWLINE, RET, RETURN, RUBOUT (un espace arrière destructif), SPACE, SPC et TAB.

En plus des noms de commandes, readline permet d'associer à une touche une chaîne de caractères qui sera insérée lorsque la touche est pressée (une macro). La différence entre une macro et une commande est qu'une macro est encadrée par des guillemets simples ou doubles.

Raccourcis clavier readline

La syntaxe pour contrôler les raccourcis clavier dans le fichier inputrc est simple. Tout ce qui est nécessaire est le nom de la commande ou le texte d'une macro et la séquence de touches à laquelle il faut l'associer. La séquence de touches peut être indiquée de l'une de ces deux façons : comme un nom de touche symbolique, éventuellement précédé des préfixes Meta- ou Control- ou sous forme d'une séquence de touches d'un ou plusieurs caractères encadrés par des guillemets doubles. La séquence de caractères et le nom sont séparés par deux-points. Il ne peut pas y avoir d'espace entre le nom et les deux-points.

En utilisant la forme touche:nom_de_fonction ou macro, touche est le nom de la touche en anglais. Par exemple :


Control-u: universal-argument Meta-Rubout: backward-kill-word Control-o: "> output"

Dans l'exemple ci-dessus, C-u est associé à la fonction universal-argument, M-DEL à la fonction backward-kill-word et C-o à l'exécution de la macro exprimée dans la partie gauche (c'est-à-dire, insérer le texte “> output” sur la ligne).

Avec la seconde forme, "suite_de_touches":nom_de_fonction ou macro, suite_de_touches diffère de touche ci-dessus en ce que les chaînes notant une suite complète de touches peuvent être indiquées en plaçant la suite entre guillemets doubles. Certaines séquences de touches d'échappement dans le style GNU Emacs peuvent être utilisées, comme dans l'exemple suivant, mais aucun des noms de caractères symboliques ne sont reconnus.


"\C-u": universal-argument "\C-x\C-r": re-read-init-file "\e[11~": "Function Key 1"

Dans cet exemple, C-u est à nouveau associé à la fonction universal-argument, C-x C-r à la fonction re-read-init-file et ESC [ 1 1 ~ à l'insertion du texte “Function Key 1”.

Le jeu complet des suites de caractères de protection du style GNU Emacs disponible pour spécifier des suites de touches est :

préfixe Contrôle ;
Ajout du préfixe méta ou conversion du caractère suivant en caractère méta comme décrit ci-dessous dans force-meta-prefix ;
caractère de protection ;
\\
contre-oblique ;
\"
guillemet double, " littéral ;
\'
guillemet simple, ' littéral.

En plus des suites de caractères de protection dans le style GNU Emacs, un second jeu de suites de caractères de protection par contre-obliques est disponible :

alerte (alarme)
espace arrière
suppression
saut de page (« form feed »)
changement de ligne
retour chariot
tabulation horizontale
tabulation verticale
le caractère 8 bits dont la valeur octale est nnn (un à trois chiffres).
le caractère 8 bits dont la valeur hexadécimale est HH (un ou deux chiffres hexadécimaux)

Lors de la saisie du texte d'une macro, il faut utiliser des guillemets simples ou doubles pour indiquer la définition de la macro. Les textes non protégés sont considérés comme des noms de fonction. Les protections par contre-oblique décrites ci-dessus sont développées dans le corps de la macro. La contre-oblique protège tout autre caractère dans le texte de la macro, y compris " et '.

bash affichera ou modifiera les raccourcis clavier readline actuels avec la commande interne bind. Les options -o emacs ou *o vi de la commande set changent le mode d'édition pendant une utilisation interactive (consultez COMMANDES INTERNES DE L'INTERPRÉTEUR ci-dessous).

Variables de readline

readline dispose de variables permettant de personnaliser encore plus son comportement. Une variable peut être configurée dans le fichier inputrc avec une affectation de la forme

set nom_de_variable valeur

ou utilisant la commande interne bind (consultez COMMANDES INTERNES DE L'INTERPRÉTEUR ci-dessous).

Sauf indication contraire, les variables de readline prennent les valeurs On ou Off (la casse étant sans importance). Les noms de variable non reconnus sont ignorés. Lorsque readline lit une valeur de variable, des valeurs vides ou NULL, “on” (insensible à la casse) et “1” sont équivalentes à On. Toutes les autres valeurs sont équivalentes à Off.

La commande bind -V liste le nom et la valeur des variables readline (consultez COMMANDES INTERNES DE L'INTERPRÉTEUR ci-dessous).

Les variables et leurs valeurs par défaut sont :

Une variable de chaîne qui contrôle la couleur du texte et du fond lors de l'affichage du texte dans la zone active (consultez la description de enable-active-region ci-dessous). Cette chaîne ne doit pas occuper l'emplacement d'un caractère physique quelconque sur l'affichage, aussi elle doit consister uniquement en séquences d'échappement du terminal. Elle est envoyée au terminal avant l'affichage du texte dans la zone active. Cette variable est remise à sa valeur par défaut chaque fois que le type de terminal change. La valeur par défaut est la chaîne qui place le terminal en mode standout telle qu'obtenue à partir de la description terminfo du terminal. Cette valeur pourrait être par exemple “\e[01;33m”.
Une variable de chaîne qui “undoes” (annule) les effets de active-region-start-color et rétablit l'apparence “normal” de l'affichage du terminal après l'affichage de texte dans la zone active. Cette chaîne ne doit pas occuper l'emplacement d'un caractère physique quelconque sur l'affichage, aussi elle doit consister uniquement en séquences d'échappement du terminal. Elle est envoyée au terminal après l'affichage du texte dans la zone active. Cette variable est remise à sa valeur par défaut chaque fois que le type de terminal change. La valeur par défaut est la chaîne qui rétablit le terminal à partir du mode standout telle qu'obtenue à partir de la description terminfo du terminal. Cette valeur pourrait être par exemple “\e[0m”.
Cette variable contrôle le comportement quand readline veut déclencher l'alarme du terminal. Si configurée à none, readline n'émet jamais d'alarme. Si configurée à visible, readline utilise une alarme visuelle s'il y en a une de disponible. Si configurée à audible, readline essaie de faire sonner l'alarme du terminal.
Si configurée à On, readline tente d'associer les caractères de contrôle qui sont traités spécialement par le pilote de terminal du noyau à leurs équivalents readline. Cela outrepasse les associations de readline décrites ici. Entrez “stty -a” à une invite de bash pour voir les réglages actuels de votre terminal, y compris les caractères de contrôle spéciaux (habituellement cchars).
Si configurée à On, readline tente de déplacer brièvement le curseur vers une parenthèse ouvrante lors de l'insertion d'une parenthèse fermante.
Si configurée à On, lors du listage des complètements, readline affiche le préfixe commun du jeu des complètements possibles en utilisant une couleur différente. Les définitions de couleur sont prises selon la valeur de la variable d’environnement LS_COLORS. S'il y a une définition de couleur dans $LS_COLORS pour le suffixe personnalisé “.readline-colored-completion-prefix”, readline utilise cette couleur pour le suffixe commun plutôt que la valeur par défaut.
Si configurée à On, readline affiche les complètements possibles en utilisant des couleurs différentes pour indiquer leur type de fichier. Les définitions de couleur sont prises dans la valeur de la variable d’environnement LS_COLORS.
“#”) La chaîne que la commande de readline insert-comment insère. Cette commande est associée à M-# en mode Emacs et à # en mode de commande vi.
Le nombre de colonnes d'écran utilisées pour afficher de possibles correspondances lors de la réalisation du complètement. La valeur est ignorée si elle est inférieure à 0 ou supérieure à la largeur de l'écran du terminal. Une valeur de 0 fait que les correspondances seront affichées une par ligne. La valeur par défaut est -1.
Si configurée à On, readline effectue les correspondances et complètements de noms de fichier sans tenir compte de la casse.
Si configurée à On et completion-ignore-case activée, readline traite les traits d'union (-) et les tirets bas (_) comme équivalents lorsqu'elle réalise une recherche de correspondance et un complètement de nom de fichier insensibles à la casse.
La longueur maximale, en caractères, du préfixe commun d'une liste de complètements possibles affiché sans modification. Si configurée en valeur positive, les préfixes communs plus longs que cette valeur sont remplacés par des points de suspension lors de l'affichage des complètements possibles. Si un complètement débute par un point et que readline complète des noms de fichier, il utilise trois tirets bas plutôt que des points de suspension.
Cela détermine quand l'utilisateur est interrogé pour voir le nombre de complètements possibles produits par la commande possible-completions. Elle peut être configurée à toute valeur entière positive. Si le nombre de complètements possibles est supérieur ou égal à la valeur de cette variable, readline demande à l'utilisateur s'il veut ou non les voir ; sinon, readline les liste simplement sur le terminal. Une valeur zéro signifie que readline ne le demandera jamais ; des valeurs négatives sont traitées comme un zéro.
Si configurée à On, readline transforme les caractères qu'il lit et qui ont le huitième bit défini à une suite de caractères ASCII en supprimant le huitième bit et en le préfixant d'un caractère de protection (convertissant le caractère pour qu'il ait le préfixe méta). La configuration par défaut est On, mais readline la fixe à Off si le paramètre linguistique régional contient des caractères dont l'encodage peut inclure des octets avec le huitième bit défini. Cette variable dépend du paramètre linguistique régional LC_CTYPE et peut changer si le paramètre linguistique régional est modifié. Cette variable affecte aussi des raccourcis clavier ; voir la description de force-meta-prefix ci-dessous.
Si configurée à On, readline empêche le complètement des mots. Les caractères de complètement sont insérés sur la ligne comme s'ils avaient été associés à self-insert.
Si configurée à On, sur les systèmes d'exploitation le permettant, readline affiche un caractère correspondant à un signal provenant du clavier.
Commande si readline utilise un ensemble de raccourcis clavier similaires à Emacs ou à vi. editing-mode peut être positionné soit à emacs, soit à vi.
Si la variable show-mode-in-prompt est activée, cette chaîne est affichée immédiatement avant la dernière ligne de la première invite quand le mode édition d'Emacs est activé. La valeur est développée comme un raccourci clavier, donc le jeu standard de préfixes meta- ou Control- et de séquences de protections par contre-oblique est disponible. Les caractères de protection \1 et \2 ouvrent et ferment les séquences de caractères non imprimables, ce qui peut être utilisé pour inclure une suite de caractères de contrôle du terminal dans la chaîne de mode.
Quand cette variable est réglée à On, readline permet à certaines commandes de désigner la zone comme active. Quand la zone est active, readline surligne le texte en utilisant la valeur de la variable active-region-start-color qui est par défaut la chaîne qui active le mode standout du terminal. La région active montre le texte inséré par collage spécial (bracketed-paste) et tout texte correspondant trouvé lors de recherches incrémentales et non incrémentales dans l'historique.
Quand configurée à On, readline configurera le terminal pour pouvoir insérer chaque collage dans le tampon d'édition comme une chaîne de caractères unique, au lieu de traiter chaque caractère comme s'il avait été lu à partir du clavier. Cela s'appelle le mode bracketed-paste) et il empêche readline d'exécuter toute commande d'édition liée à des suites de touches apparaissant dans le texte collé.
Quand configurée à On, readline essaye d'activer le pavé numérique de l'application une fois appelée. Sur certains systèmes, c'est nécessaire pour utiliser les flèches.
Quand configurée à On, readline essaye d'activer toutes les touches de modificateur Méta que le terminal peut prendre en charge. Sur de nombreux terminaux, la touche Méta est utilisée pour saisir des caractères sur huit bits ; cette variable vérifie la capacité du terminal qui indique que le terminal peut activer et désactiver un mode qui définit le huitième bit d'un caractère (0200) si la touche Méta est maintenue enfoncée quand le caractère est saisi (un caractère méta).
Si configurée à On, readline effectue le développement du tilde lorsqu'il tente un complètement de commandes.
Si configurée à On, readline modifie son comportement lors de la liaison de suites de touches contenant \M- ou Meta- (voir Raccourcis clavier ci-dessus) en convertissant une séquence de touches de la forme \M-C ou Meta-C en la suite de deux caractères ESC C (en ajoutant le préfixe méta). Si force-meta-prefix est configurée à Off valeur par défaut), readline utilise la valeur de la variable convert-meta pour déterminer s'il faut effectuer cette conversion : si convert-meta est On, readline effectue la conversion décrite ci-dessus ; si c'est Off, readline convertit C en un caractère méta en définissant le huitième bit (0200).
Si configurée à On, le programme d'historique tente de placer le curseur au même endroit sur chaque ligne d'historique récupérée avec previous-history ou next-history.
Configure le nombre maximal d'éléments sauvegardés dans la file de l'historique. Si configuré à zéro, tous les éléments sont effacés et aucun nouvel élément n’est sauvegardé. Si configuré à une valeur strictement négative, le nombre d'éléments de la file d’historique n'est pas limité. Par défaut, bash définit le nombre maximal d’éléments à la valeur de la variable HISTSIZE de l'interpréteur. Définir history-size à une valeur non numérique, définira le nombre maximal d'éléments à 500.
La configuration de cette variable à On fait que readline utilisera une seule ligne d'affichage et fera défiler la saisie horizontalement sur une seule ligne d'écran quand elle devient plus longue que la largeur de l'écran, plutôt que de faire un retour à la ligne. Ce réglage est activé automatiquement pour les terminaux de hauteur 1.
Si configurée à On, readline accepte des saisies sur huit bits (autrement dit il ne supprime pas le huitième bit des caractères qu'il lit), sans tenir compte de ce que le terminal prétend pouvoir prendre en charge. La configuration par défaut est Off, mais readline la fixe à On si le paramètre linguistique régional contient des caractères dont l'encodage peut inclure des octets avec le huitième bit défini. Cette variable dépend du paramètre linguistique régional LC_CTYPE et peut changer si le paramètre linguistique régional est modifié. Le nom meta-flag est un synonyme de input-meta.
“C-[C-j”) La chaîne de caractères qui doit terminer une recherche incrémentale sans que le caractère ne soit exécuté comme une commande. Si cette variable n'a pas reçu de valeur, les caractères ESC et C-J terminent une recherche incrémentale.
Configure le jeu de raccourcis readline actuel. L'ensemble des noms corrects de jeux de raccourcis est emacs, emacs-standard, emacs-meta, emacs-ctlx, vi, vi-command et vi-insert. vi est équivalent à vi-command ; emacs est équivalent à emacs-standard. La valeur par défaut est emacs ; la valeur de editing-mode modifie aussi le jeu de raccourcis par défaut.
Indique le temps que readline attendra un caractère lors de la lecture d'une séquence de touches ambiguë (c’est-à-dire qui peut former une suite de touches complète en utilisant l'entrée lue jusqu'à présent, ou accepter une entrée supplémentaire pour compléter une séquence de touches plus longue). Si readline ne reçoit aucune entrée pendant le temps d'attente, il utilise la suite la plus courte, mais complète. La valeur est indiquée en milliseconde, donc une valeur de 1000 signifie que readline attendra pendant une seconde une entrée supplémentaire. Si cette variable est configurée à une valeur inférieure ou égale à zéro, ou à une valeur non numérique, readline attend la saisie d’une autre touche pour décider de la séquence de touches à compléter.
Si configurée à On, une barre oblique est ajoutée aux noms de répertoire.
Si configurée à On, readline affiche les lignes d'historique qui ont été modifiées avec un astérisque en tête (*).
Si configurée à On, une barre oblique est ajoutée aux noms complétés si ce sont des liens symboliques vers des répertoires selon la valeur de mark-directories.
Cette variable, quand elle est configurée à On, conduit readline à faire correspondre des fichiers dont le nom commence par un “.” (fichiers cachés) lors du complètement de noms de fichier. Si configurée à Off, l'utilisateur doit inclure le “.” du début dans le nom à compléter.
Si configurée à On, le complètement de menu affiche le préfixe commun à la liste de complètements possibles (qui peut être vide) avant de parcourir la liste.
Si configurée à On, readline affiche directement les caractères ayant leur huitième bit défini plutôt que d'utiliser une suite de caractères de protection avec préfixe méta. La configuration par défaut est Off, mais readline la fixe à On si le paramètre linguistique régional contient des caractères dont l'encodage peut inclure des octets avec le huitième bit défini. Cette variable dépend du paramètre linguistique régional LC_CTYPE et peut être modifiée si le paramètre linguistique régional change.
Si configurée à On, readline utilise un pageur interne ressemblant à more pour afficher une pleine page de complètements.
Voir bell-style
Si configurée à On, readline affiche les complètements correspondants triés horizontalement dans l'ordre alphabétique plutôt que verticalement.
Si configurée à On, readline annulera toutes les modifications des lignes d'historique avant de s'arrêter quand accept-line est exécuté. Par défaut les lignes d'historique peuvent être modifiées et conservent les listes d'annulation individuelles au fur et à mesure des appels à readline.
Si configurée à On, readline effectue les recherches incrémentales et non incrémentales dans la file d'historique sans tenir compte de la casse.
Cela modifie le comportement par défaut des fonctions de complètement. Si configurée à On, les mots qui ont plus d'un complètement possible conduisent à l'affichage immédiat des correspondances plutôt qu'à l'émission d'une alarme.
Cela modifie le comportement par défaut des fonctions de complètement de façon similaire à show-all-if-ambiguous. Si configurée à On, les mots qui ont plus d'un complètement possible sans aucun complètement partiel possible (les complètements possibles ne partagent pas de préfixe commun) conduisent à l'affichage immédiat des correspondances plutôt qu'à l'émission d'une alarme.
Si configurée à On, ajoute une chaîne au début de l'invite indiquant le mode d’édition : Emacs, commande Vi ou insertion Vi. L'utilisateur peut configurer la chaîne de mode (par exemple, emacs-mode-string).
Si configurée à On, modifie le comportement par défaut du complètement lors de l'insertion d'une unique correspondance dans la ligne. Elle n'est utilisée que lors d'un complètement effectué au milieu d'un mot. Si elle est activée, readline n'insère pas de caractères de complètement correspondant à des caractères situés après le curseur dans le mot en cours de complètement, ainsi les parties du mot situées après le curseur ne sont pas dupliquées.
Si la variable show-mode-in-prompt est activée, cette chaîne est affichée immédiatement avant la dernière ligne de la première invite quand le mode d'édition de vi est activé et en mode commande. La valeur est développée comme un raccourci clavier, donc le jeu standard de préfixes meta- ou Control- et de séquences de protections par contre-oblique est disponible. Les caractères de protection \1 et \2 ouvrent et ferment les séquences de caractères non imprimables, ce qui peut être utilisé pour inclure une suite de caractères de contrôle du terminal dans la chaîne de mode.
Si la variable show-mode-in-prompt est activée, cette chaîne est affichée immédiatement avant la dernière ligne de la première invite quand le mode d'édition de vi est actif et en mode insertion. La valeur est développée comme un raccourci clavier, donc le jeu standard de préfixes meta- ou Control- et de séquences de protections par contre-oblique est disponible. Les caractères de protection \1 et \2 ouvrent et ferment les séquences de caractères non imprimables, ce qui peut être utilisé pour inclure une suite de caractères de contrôle du terminal dans la chaîne de mode.
Si configurée à On, un caractère indiquant le type de fichier, comme signalé par stat(2), est ajouté aux noms de fichier en affichant les complètements possibles.

Constructions conditionnelles de readline

readline implémente un mécanisme inspiré des fonctionnalités de compilation conditionnelle du préprocesseur C qui permet d'effectuer le paramétrage des raccourcis clavier et des variables selon les résultats de tests. Il y a quatre directives d'analyse disponibles.

$if
La structure $if permet de choisir les raccourcis selon le mode d'édition, le terminal utilisé ou l'application utilisant readline. Le texte du test, après n’importe quel opérateur de comparaison, va jusqu'à la fin de la ligne ; sauf notation contraire, aucun caractère n'est nécessaire pour le délimiter.
La forme mode= de la directive $if est utilisée pour vérifier si readline est en mode emacs ou vi. Cela peut être utilisé conjointement avec la commande set keymap, par exemple pour ne configurer les raccourcis des jeux de raccourcis emacs-standard et emacs-ctlx que si readline démarre en mode emacs.
La forme term= peut être utilisée pour ajouter des raccourcis clavier spécifiques au terminal, comme associer des suites de touches produites par des touches de fonction du terminal. Le mot à droite du signe = est comparé à la fois au nom complet du terminal et à la portion de nom du terminal qui précède le premier signe -. Cela permet, par exemple, de faire correspondre xterm avec à la fois xterm et xterm-256color.
Le test de version peut être utilisé pour effectuer des comparaisons avec des versions particulières de readline. La version est développée selon la version actuelle de readline. L'ensemble d'opérateurs de comparaison inclut =, (et ==), !=, <=, >=, < et >. Le numéro de version fourni à droite de l'opérateur consiste en un numéro de version majeure, un point décimal facultatif et un numéro de version mineure facultatif (par exemple, 7.1). Si la version mineure est omise, la valeur par défaut est 0. L'opérateur peut être séparé de la chaîne version et de l'argument du numéro de version par une espace.
La structure application est utilisée pour inclure des paramétrages spécifiques à chaque application. Chaque programme utilisant la bibliothèque readline configure un nom d'application et un fichier d'initialisation peut tester une valeur particulière. Cela peut être utilisé pour associer des suites de touches à des fonctions utiles pour un programme particulier. Par exemple, les commandes suivantes ajoutent une séquence de touches qui protège le mot actuel ou précédent dans bash :


$if Bash # Protéger le mot actuel ou le précédent "\C-xq": "\eb\"\ef\"" $endif
La structure variable fournit des tests d'égalité simples pour les variables et les valeurs de readline. Les opérateurs de comparaison permis sont =, == et !=. Le nom de la variable doit être séparé de l'opérateur par une espace ; l'opérateur peut être séparé de la valeur à droite par une espace. Les variables de chaîne et les variables booléennes peuvent être testées. Les variables booléennes doivent être comparées aux valeurs on et off.
$else
Les commandes dans cette branches de la directive $if sont exécutées si le test échoue.
$endif
Cette commande, comme on l'a vu dans l'exemple ci-dessus, termine une commande $if.
$include
Cette directive prend un seul nom de fichier comme argument et y lit les commandes et les raccourcis clavier. Par exemple, la directive suivante lirait le fichier /etc/inputrc :

$include  /etc/inputrc

Recherche

Readline fournit des commandes de recherche au sein de l'historique de commandes (consultez HISTORIQUE ci-dessous) des lignes contenant une chaîne donnée. Il y a deux modes de recherche : incrémental et non incrémental.

Les recherches incrémentales commencent avant même que l'utilisateur n'ait terminé de saisir la chaîne recherchée. À chaque caractère saisi, readline affiche l'élément suivant de l'historique qui correspond à la chaîne déjà entrée. Une recherche incrémentale nécessite seulement le nombre de caractères indispensable pour retrouver l'élément d'historique désiré. Quand le mode d'édition d'Emacs est utilisé, la saisie de C-r recherche une chaîne particulière en arrière dans l'historique. La saisie de C-s recherche en avant dans l'historique. Les caractères se trouvant dans la variable isearch-terminators servent à terminer une recherche incrémentale. Si aucune valeur n'a été affectée à cette variable, les caractères ESC et C-j terminent une recherche incrémentale. C-g interrompt une recherche incrémentale et restaure la ligne originale. Lorsque la recherche est finie, l'élément d'historique contenant la chaîne désirée devient la ligne actuelle.

Pour trouver les autres éléments correspondant dans la file d'historique, saisissez la combinaison C-r ou C-s appropriée. Cela recherche en avant ou en arrière dans l'historique l'élément suivant correspondant à la chaîne de recherche saisie jusqu'à présent. Toute autre séquence de touches associée à une commande readline interrompt la recherche et exécute la commande. Par exemple, un changement de ligne interrompt la recherche et accepte la ligne, exécutant ainsi la commande de la file d'historique. Une commande de déplacement va terminer la recherche, faire de la dernière ligne trouvée la ligne actuelle et débuter l'édition.

readline se souvient de la dernière chaîne de recherche incrémentale. Si deux C-r sont saisis sans caractère pour définir une nouvelle chaîne de recherche, readline utilise toute chaîne mémorisée.

Les recherches non incrémentales lisent la chaîne désirée en entier avant de démarrer la recherche de correspondance dans les entrées d'historique. La chaîne peut être saisie par l'utilisateur ou faire partie du contenu de la ligne actuelle.

Noms des commandes readline

Ce qui suit est une liste des noms de commandes et les séquences de touches auxquelles elles sont associées par défaut. Les noms de commande sans séquence de touches les accompagnant ne sont pas associées par défaut.

Dans les descriptions suivantes, le curseur (« point ») se rapporte à la position actuelle du curseur et la marque se rapporte à une position de curseur sauvegardée par la commande set-mark. Le texte entre le curseur et la marque est désigné comme la zone. readline possède le concept de zone active : quand la zone est active, l'affichage de readline met en surbrillance la zone en utilisant la valeur de la variable active-region-start-color. La variable enable-active-region active ou désactive cette fonction. Plusieurs commandes rendent la zone active ; elles sont notées ci-dessous.

Commandes de déplacement

Reculer au début de la ligne actuelle. Sur certains claviers, ce déplacement peut aussi être lié à la touche Début.
Avancer à la fin de la ligne. Sur certains claviers, ce déplacement peut aussi être lié à la touche Fin.
Avancer d'un caractère. Sur certains claviers, ce déplacement peut aussi être lié à la touche flèche vers la droite.
Reculer d'un caractère. Sur certains claviers, ce déplacement peut aussi être lié à la touche flèche vers la gauche.
Avancer jusqu'à la fin du mot suivant. Les mots sont composés de caractères alphanumériques (lettres et chiffres).
Reculer jusqu'au début du mot actuel ou du précédent. Les mots sont composés de caractères alphanumériques (lettres et chiffres).
Avancer jusqu'à la fin du mot suivant. Les mots sont séparés par des métacaractères non protégés de l'interpréteur.
Reculer jusqu'au début du mot actuel ou du précédent. Les mots sont séparés par des métacaractères non protégés de l'interpréteur.
Tenter de déplacer le curseur vers la même colonne physique de l'écran sur la ligne physique précédente de l'écran. Cela n'aura pas l'effet désiré si la ligne actuelle de readline n'accepte pas plus d'une ligne physique ou si la position du curseur n'est pas supérieure à la longueur de l'invite plus la largeur de l'écran.
Tenter de déplacer le curseur vers la même colonne physique de l'écran sur la physique ligne suivante de l'écran. Cela n'aura pas l'effet désiré si la ligne actuelle de readline n'accepte pas plus d'une ligne physique ou si la longueur de la ligne actuelle de readline n'est pas supérieure à la longueur de l'invite plus la largeur de l'écran.
Effacer l'écran et, si possible, le tampon de défilement du terminal, puis rafraîchir la ligne actuelle, en laissant la ligne actuelle au sommet de l'écran.
Effacer l'écran, puis rafraîchir la ligne actuelle, en laissant la ligne actuelle au sommet de l'écran. S'il y a un argument numérique, rafraîchir la ligne actuelle sans effacer l'écran.
Rafraîchir la ligne actuelle.

Commandes de manipulation de l'historique

Valider la ligne, sans se soucier de l'emplacement du curseur. Si la ligne n'est pas vide, l'ajouter à la file d'historique, en fonction de l'état des variables HISTCONTROL et HISTIGNORE. Si cette ligne est une ligne d'historique modifiée, restaurer cette dernière.
Récupérer la commande précédente de la file d'historique, en remontant dans la file. Sur certains claviers, cette action peut aussi être liée à la touche flèche vers le haut.
Récupérer la commande suivante dans la file d'historique, en descendant dans la file. Sur certains claviers, cette action peut aussi être liée à la touche flèche vers le bas.
Récupérer la première ligne de l'historique.
Retourner à la fin de l'historique de saisie, c'est-à-dire à la ligne en cours de saisie.
Valider la ligne actuelle pour exécution comme si une nouvelle ligne avait été saisie et récupérer depuis l'historique la ligne suivante liée à la ligne actuelle pour édition. Si un argument numérique est fourni, il spécifie l'entrée de l'historique à utiliser à la place de la ligne actuelle.
Avec argument numérique, récupérer cette entrée de la file d'historique et en faire la ligne actuelle. Sans argument, revenir à la première entrée de la file d'historique.'
Rechercher en arrière en partant de la ligne actuelle, en remontant ( “up” ) dans l'historique autant que nécessaire. C'est une recherche incrémentale. Cette commande définit la zone du texte correspondant et active la zone.
Rechercher en avant en partant de la ligne actuelle en descendant ( “down” ) dans l'historique autant que nécessaire. C'est une recherche incrémentale. Cette commande définit la zone du texte correspondant et active la zone.
Rechercher une chaîne en arrière dans l'historique, en remontant depuis la ligne actuelle, en utilisant une recherche non incrémentale pour une chaîne fournie par l'utilisateur. La chaîne recherchée peut trouver une correspondance n'importe où dans une ligne de l'historique.
Rechercher une chaîne en avant dans l'historique, en utilisant une recherche non incrémentale pour une chaîne fournie par l'utilisateur. La chaîne recherchée peut trouver une correspondance n'importe où dans une ligne de l'historique.
Rechercher en arrière dans l'historique la chaîne comprise entre le début de la ligne actuelle et la position du curseur. La chaîne recherchée peut trouver une correspondance au début d'une ligne de l'historique. C'est une recherche non incrémentale. Sur certains claviers, cette action peut être liée à la touche page précédente.
Rechercher en avant dans l'historique la chaîne comprise entre le début de la ligne actuelle et la position du curseur. La chaîne recherchée peut trouver une correspondance au début d'une ligne de l'historique. C'est une recherche non incrémentale. Sur certains claviers, cette action peut être liée à la touche page suivante.
Rechercher en arrière dans l'historique la chaîne comprise entre le début de la ligne actuelle et la position du curseur. La chaîne recherchée peut trouver une correspondance n'importe où dans une ligne de l'historique. C'est une recherche non incrémentale.
Rechercher en avant dans l'historique la chaîne comprise entre le début de la ligne actuelle et la position du curseur. La chaîne recherchée peut trouver une correspondance n'importe où dans une ligne de l'historique. C'est une recherche non incrémentale.
Insérer, à l'emplacement du curseur, le premier argument de la commande précédente. Généralement, il s'agit du second mot de la ligne précédente. Avec un argument n, insérer le n-ième mot de la commande précédente (les mots sont numérotés à partir de 0). Un argument négatif insère le n-ième mot en partant de la fin de la commande précédente. Une fois l'argument n traité, les outils de développement d'historique sont utilisés pour extraire le nième mot comme si le développement d'historique “!n” avait été indiqué.
Insérer le dernier argument de la commande précédente (le dernier mot de l'élément précédent de la file d'historique). Avec un argument numérique, se comporte exactement comme yank-nth-arg. Les appels successifs à yank-last-arg remontent dans la file d'historique en insérant le dernier mot (ou le mot indiqué par l'argument du premier appel) de chaque ligne tour à tour. Tous les arguments numériques fournis à ces appels successifs déterminent la direction de déplacement dans l'historique. Un argument négatif modifie la direction dans l'historique (en avant ou en arrière). Les outils de développement d'historique sont utilisés pour extraire le dernier mot, comme si le développement d'historique “!$” avait été indiqué.
Développer la ligne en effectuant le développement de mot de l'interpréteur, Cela effectue le développement des alias et d'historique, la protection par $'chaîne' et $"chaîne", le développement de tilde, le développement des paramètres et des variables, le développement arithmétique, la substitution de commande et de processus, le découpage en mots et la suppression des protections, Un argument explicite supprime la substitution de commande et de processus. Consultez ci-dessous DÉVELOPPEMENT DE L'HISTORIQUE, pour une description détaillée du développement de l'historique.
Effectuer le développement de l'historique sur la ligne actuelle. Consultez ci-dessous DÉVELOPPEMENT DE L'HISTORIQUE, pour une description détaillée.
Effectuer le développement de l'historique sur la ligne actuelle et insérer une espace. Consultez ci-dessous DÉVELOPPEMENT DE L'HISTORIQUE, pour une description détaillée.
Effectuer le développement des alias sur la ligne actuelle. Consultez ALIAS ci-dessus pour une description des développements d'alias.
Effectuer le développement de l'historique et des alias sur la ligne actuelle.
Un synonyme de yank-last-arg.
Appeler un éditeur sur la ligne de commande actuelle et exécuter le résultat comme une commande d'interpréteur. bash tente d'appeler, dans cet ordre, $VISUAL, $EDITOR et emacs comme éditeur.

Commande d'édition de texte

Le caractère indiquant la fin de fichier (EOF) est défini, par exemple, par stty(1). Si ce caractère est lu alors qu'aucun caractère n'est sur la ligne, et que le curseur est au début de la ligne, readline l'interprète comme la fin de l'entrée et renvoie EOF.
Effacer le caractère sous le curseur. Si cette fonction est associée au même caractère que le caractère EOF du terminal, comme c’est souvent le cas avec C-d, consultez les effets dans le paragraphe précédent. Sur certains claviers, cela peut aussi être lié à la touche Suppression.
Effacer le caractère avant le curseur. Lorsque un argument numérique est indiqué, le texte effacé est sauvegardé dans le tampon circulaire.
Effacer le caractère sous le curseur, sauf s'il est en fin de ligne, auquel cas le caractère avant le curseur est effacé.
Ajouter littéralement sur la ligne le caractère saisi suivant. Cela permet d'insérer des caractères comme C-q, par exemple.
Insérer un caractère de tabulation.
Insérer le caractère saisi.
Cette fonction est destinée à être liée à la suite de caractères de protection “bracketed paste” (collage spécial) envoyée par certains terminaux, et une telle liaison est affectée par défaut. Elle permet à readline d'insérer le texte collé comme une seule unité sans traiter chaque caractère comme s'il avait été lu à partir du clavier. Les caractères collés sont insérés comme si chacun était lié à self-insert plutôt que d'exécuter des commandes d'édition.
Le collage spécial (bracketed paste) définit la zone sur le texte inséré et active la zone.
Déplacer le caractère avant le curseur au-delà du caractère sous le curseur, et déplacer aussi le curseur. Si le curseur est à la fin de la ligne, les caractères échangés sont les deux précédents. Les arguments négatifs n'ont aucun effet.
Déplacer le mot avant le curseur au-delà du mot après le curseur et déplacer aussi le curseur au-delà de ce mot. Si le curseur est à la fin de la ligne, cela échange les deux derniers mots de la ligne.
Déplacer le mot avant le curseur au-delà du mot après le curseur et déplacer aussi le curseur après ce mot. Si le point d'insertion est à la fin de la ligne, cela échange les deux derniers mots de la ligne. Les limites de mots sont identiques à celles utilisées par shell-forward-word et shell-backward-word.
Transformer le mot actuel (ou le suivant) en capitales. Avec un argument négatif, agir sur le mot précédent mais ne pas déplacer le curseur.
Transformer le mot actuel (ou le suivant) en minuscules. Avec un argument négatif, agir sur le mot précédent mais ne pas déplacer le curseur.
Passer le mot actuel (ou du suivant) en capitales. Avec un argument négatif, agir sur le mot précédent mais ne pas déplacer le curseur.
Basculer en mode d'écrasement. Avec un argument numérique explicite strictement positif, basculer en mode d'écrasement. Avec un argument numérique explicite négatif ou nul, basculer en mode d'insertion. Cette commande n'affecte que le mode emacs ; le mode vi écrase de façon différente. Chaque appel readline() démarre en mode d'insertion.
En mode d'écrasement, les caractères associés à self-insert remplacent le texte sous le curseur plutôt que de déplacer le texte vers la droite. Les caractères associés à backward-delete-char remplacent le caractère avant le curseur par une espace. Par défaut, cette commande n'est pas associée, mais sur certains claviers, elle peut être associée à la touche Insertion.

Effacement et récupération

Effacer le texte du curseur à la fin de la ligne actuelle. Avec un argument numérique négatif, effacer en arrière du curseur au début de la ligne.
Effacer en arrière jusqu'au début de la ligne actuelle. Avec un argument numérique négatif, effacer du curseur à la fin de la ligne.
Effacer le texte entre le début de la ligne et la position du curseur en sauvegardant le texte effacé dans le tampon circulaire.
Effacer toute la ligne sans tenir compte de la position du curseur.
Effacer le texte entre le curseur et la fin du mot actuel ou, si entre des mots, jusqu'à la fin du mot suivant. Les limites des mots sont identiques à celles utilisées par forward-word.
Effacer le mot sous le curseur. Les limites de mots sont identiques à celles utilisées par backward-word.
Effacer le texte entre le curseur et la fin du mot actuel ou, si entre des mots, jusqu'à la fin du mot suivant. Les limites des mots sont identiques à celles utilisées par shell-forward-word.
Effacer le mot sous le curseur. Les limites de mots sont identiques à celles utilisées par shell-backward-word.
Effacer le mot sous le curseur, en utilisant un espace blanc comme limite de mot en sauvegardant le texte effacé dans le tampon circulaire.
Effacer le mot sous le curseur, en utilisant un espace blanc et la barre oblique comme limites de mot en sauvegardant le texte effacé dans le tampon circulaire.
Effacer toutes les espaces et tabulations autour du curseur.
Effacer le texte de la zone actuelle.
Copier le texte de la zone vers le tampon circulaire afin qu'il puisse être copié immédiatement.
Copier le mot précédant le curseur dans le tampon circulaire. Les limites de mots sont identiques à celles de backward-word.
Copier le mot suivant le curseur dans le tampon circulaire. Les limites de mots sont identiques à celles de forward-word.
Récupérer le texte au sommet du tampon circulaire à la position du curseur dans le tampon.
Exécuter une rotation du tampon circulaire et récupérer le texte situé à son nouveau sommet. Cela ne fonctionne qu'après yank ou yank-pop.

Arguments numériques

Ajouter ce chiffre à l'argument en cours de rédaction ou créer un nouvel argument. M-- crée un argument négatif.
Il s'agit d'une autre façon d'indiquer un argument. Si cette commande est suivie d'un ou plusieurs chiffres facultativement précédés d'un signe moins, ces chiffres définissent l'argument. Si la commande est suivie de chiffres, une nouvelle exécution de universal-argument termine l'argument numérique, mais est ignorée dans les autres cas. Par exception, si cette commande est suivie immédiatement d'un caractère qui n'est ni un chiffre ni le signe moins, le compteur d'arguments de la commande suivante est multiplié par quatre. Le compteur d'arguments est initialement à un, donc la première exécution de cette commande amène le compteur d'arguments à quatre, une seconde fois porte le compteur d'arguments à seize et ainsi de suite.

Complètement

Essayer d'effectuer un complètement du texte situé avant le curseur. bash tente le complètement en vérifiant d'abord s'il y a des complètements programmables pour le mot de la commande (consultez Complètement programmable ci-dessous), sinon en considérant tour à tour le texte comme une variable (s'il commence par $), un nom d'utilisateur (s'il commence par ~), un nom de machine (s'il commence par @) ou une commande (y compris les alias, les fonctions et les commandes internes). Si aucun ne correspond, un complètement de fichier est essayé.
Afficher les complètements possibles du texte situé avant le curseur. Lors de l'affichage des complètements, readline définit le nombre de colonnes utilisées pour l'affichage à la valeur de completion-display-width, à celle de la variable de l'interpréteur COLUMNS ou à la largeur de l'écran, dans cet ordre.
Insérer l'ensemble des complètements du texte situé avant le curseur qui auraient été produits par possible-completions, séparés par une espace.
Analogue à complete, mais en remplaçant le mot à compléter par une seule correspondance de la liste des complètements possibles. Des exécutions répétées de menu-complete parcourent la liste des complètements possibles, en insérant chaque correspondance tour à tour. À la fin de la liste des complètements, menu-complete émet une alarme (selon la configuration de bell-style) et restaure le texte original. Un argument de n déplace de n positions dans la liste des correspondances. Un argument négatif peut être utilisé pour revenir en arrière dans la liste. Cette commande est destinée à être associée à la touche TAB, mais ne l'est pas par défaut.
Identique à menu-complete, mais se déplace en arrière dans la liste des complètements possibles, comme si un argument négatif avait été passé à menu-complete. Cette commande n'est associée à aucune touche par défaut.
Effectuer un complètement du mot situé avant le curseur comme décrit ci-dessus et écrire la liste des complètements possibles sur le flux de sortie de readline en utilisant le format suivant, en écrivant les informations sur des lignes distinctes :
–
le nombre de correspondances N ;
–
le mot complété ;
–
S:E, oû S et E sont la position de début et de fin du mot dans le tampon de ligne de readline ; puis
–
chaque correspondance, une par ligne.
S'il n'y a pas de correspondance, la première ligne sera “0”, et cette commande n'affiche aucune sortie après le S:E. S'il n'y a qu'une correspondance, la commande affiche une seule ligne qui la contient. S'il y a plus d'une correspondance, la commande affiche le préfixe commun des correspondances, qui peut être vide, sur la première ligne après le S:E, puis les correspondances sur les lignes suivantes. Dans ce cas, N inclura la première ligne avec le préfixe commun.
L'utilisateur ou l'application doit être capable de gérer une ligne vide. Le but est que l'utilisateur ou l'application lise N lignes après la ligne qui contient S:E pour obtenir la liste de correspondances. Cette commande n'est associée à aucune touche par défaut.
Effacer le caractère sous le curseur sauf au début ou en fin de ligne (comme delete-char). En fin de ligne, cette commande se comporte comme possible-completions. Cette commande n'est associée à aucune touche par défaut.
Essayer le complètement des noms de fichier sur le texte situé avant le curseur.
Afficher les complètements possibles du texte situé avant le curseur, en le traitant comme un nom de fichier.
Essayer le complètement sur le texte situé avant le curseur, en le traitant comme un nom d'utilisateur.
Afficher les complètements possibles du texte situé avant le curseur, en le traitant comme un nom d'utilisateur.
Essayer le complètement sur le texte situé avant le curseur, en le traitant comme une variable de l'interpréteur.
Afficher les complètements possibles du texte situé avant le curseur, en le traitant comme une variable de l'interpréteur.
Essayer le complètement sur le texte situé avant le curseur, en le traitant comme un nom de machine.
Afficher les complètements possibles du texte situé avant le curseur, en le traitant comme un nom de machine.
Essayer le complètement sur le texte situé avant le curseur, en le traitant comme un nom de commande. Le complètement des commandes essaie de faire correspondre le texte, dans cet ordre, aux alias, aux mots réservés, aux fonctions de l'interpréteur, aux commandes internes de l'interpréteur et finalement aux noms de fichiers exécutables.
Afficher les complètements possibles du texte situé avant le curseur, en le traitant comme un nom de commande.
Essayer le complètement du texte situé avant le curseur, en le comparant aux entrées de la file d'historique lui correspondant pour les complètements possibles.
Essayer le complètement de menu du texte situé avant le curseur, en le comparant aux lignes de la file d'historique lui correspondant pour les complètements possibles.
Effectuer un complètement de noms de fichier et insérer la liste des complètements possibles entre accolades afin que la liste soit exploitable par l'interpréteur (consultez Développement des accolades ci-dessus).

Macros clavier

Démarrer la mémorisation des caractères saisis dans la macro clavier en cours.
Arrêter la mémorisation des caractères saisis dans la macro clavier en cours et conserver la définition.
Réexécuter la dernière macro clavier définie, en agissant comme si les caractères contenus dans cette macro étaient saisis au clavier.
Afficher la dernière macro de clavier définie, mise en forme de façon à être incorporée dans un fichier inputrc.

Divers

Lire le contenu du fichier inputrc et prendre en compte tous les raccourcis ou affectations de variables qui s'y trouvent.
Abandonner l'édition en cours et émettre une alarme de terminal (selon la configuration de la variable bell-style).
Si le caractère x précédé de Méta est en capitale, exécuter la commande qui est associée aux caractères minuscules précédés de Méta correspondants. Le comportement est non défini si x est déjà en minuscule.
Considérer le prochain caractère saisi comme un Méta. ESC f est équivalent à Meta-f.
Fonction d'annulation incrémentale, chaque ligne étant mémorisée séparément.
Annuler toutes les modifications sur cette ligne. C’est équivalent à répéter undo suffisamment de fois pour ramener la ligne à son état initial.
Effectuer le développement du tilde sur le mot actuel.
Placer la marque à la position actuelle du curseur. Si un argument numérique est fourni, Poser la marque à la position correspondante.
Échanger le curseur et la marque. Configurer la position actuelle du curseur à la position sauvegardée précédemment puis poser la marque à l'ancienne position du curseur.
Lire un caractère et déplacer le curseur à l'occurrence suivante de ce caractère. Un argument négatif recherche les occurrences précédentes.
Lire un caractère et déplacer le curseur à l'occurrence précédente de ce caractère. Un argument négatif recherche les occurrences suivantes.
Lire suffisamment de caractères pour englober une suite multitouche comme celles définies pour des touches comme Début et Fin. De telles suites commencent par un indicateur de suite de contrôle (« control sequence indicator » ou CSI), habituellement ESC [. Si cette suite est associée à “\e[”, les touches qui produisent des suites SCI n'auront pas d'effet à moins d'être explicitement associées à une commande readline, au lieu d'insérer des caractères parasites dans le tampon d'édition. La commande n'est associée à aucune touche par défaut, mais elle est souvent associée à ESC [.
Sans argument numérique, insérer la valeur de la variable comment-begin de readline au début de la ligne actuelle. Si un argument numérique est fourni, cette commande agit comme une bascule : si les caractères du début de ligne ne correspondent pas à la valeur de comment-begin, insérer la valeur, sinon effacer les caractères de comment-begin du début de la ligne. Dans les deux cas, la ligne est acceptée comme si un changement de ligne avait été saisi. La valeur par défaut de comment-begin conduit cette commande à transformer la ligne actuelle en commentaire de l'interpréteur. Si un argument numérique conduit à l'effacement du caractère de commentaire, la ligne sera exécutée par l'interpréteur.
Effectuer la correction orthographique sur le mot actuel, en le traitant comme un répertoire ou un nom de fichier, de la même manière que l'option de l'interpréteur cdspell. Les limites des mots sont identiques à celles utilisées par shell-forward-word.
Traiter le mot avant le curseur comme un motif pour un développement de chemin, avec un astérisque ajouté implicitement, puis utiliser ce motif pour produire une liste de noms de fichier correspondants pour de possibles complètements.
Traiter le mot précédant le curseur comme un motif pour un développement de chemin et insérer la liste de noms de fichier correspondants à sa place. Si un argument numérique est fourni, ajouter un * avant le développement du chemin.
Afficher la liste des développements qui auraient été produits par glob-expand-word et rafraîchir la ligne. Si un argument numérique est fourni, ajouter un * avant le développement du chemin.
Afficher toutes les fonctions et leurs raccourcis clavier sur le flux de sortie de readline. Si un argument numérique est fourni, la sortie est mise en forme de façon à être incorporée dans un fichier inputrc.
Afficher toutes les variables readline modifiables et leurs valeurs sur le flux de sortie de readline. Si un argument numérique est fourni, la sortie est mise en forme de façon à être incorporée dans un fichier inputrc.
Afficher toutes les séquences de touches readline associées à des macros et les chaînes auxquelles elles correspondent sur le flux de sortie de readline. Si un argument numérique est fourni, la sortie est mise en forme de façon à être incorporée dans un fichier inputrc.
Lire à partir de l'entrée un nom de commande readline pouvant être liée et exécuter la fonction à laquelle elle est associée, comme si la suite de touches à laquelle elle a été associée apparaissait sur l'entrée. Si cette fonction est fournie avec un argument numérique, la commande passe cet argument à la fonction qu'elle exécute;
Afficher des informations sur la version actuelle de bash.

Complètement programmable

Lorsqu'un utilisateur tente un complètement de mot pour une commande ou un argument pour une commande pour laquelle une spécification de complètement a été définie en utilisant la commande interne complete (consultez COMMANDES INTERNES DE L'INTERPRÉTEUR ci-dessous), readline appelle les outils de complètement programmable.

Tout d'abord, bash identifie le nom de la commande. Si une spécification de complètement a été définie pour cette commande, elle est utilisée pour produire la liste des complètements possibles pour le mot. Si le mot de commande est une chaîne vide (le complètement est tenté au début d'une ligne vide), bash utilise toute spécification définie par l'option -E de complete. L'option -I de complete indique que le mot de commande est le premier mot de non-affectation de la ligne ou celui après un délimiteur de commande tel que ; ou |. Cela indique habituellement le complètement d'un nom de commande

Si le mot de commande est un chemin d'accès complet, bash cherche en premier lieu une spécification de complètement pour le chemin d'accès complet. S'il n'existe pas de spécification de complètement pour le chemin d'accès complet, bash tente de trouver une spécification de complètement pour la partie située après la barre oblique finale. Si ces recherches ne donnent pas de résultat sous forme de spécification de complètement, ou s'il n'y a pas de spécification de complètement pour le mot de commande. bash utilise toutes les spécifications de complètement définies par l'option -D de complete par défaut. S'il n'existe pas de spécification de complètement par défaut, bash effectue un développement d'alias sur le mot de commande en dernier ressort et tente de trouver une spécification de complètement pour le mot de commande résultant de n'importe quel développement ayant réussi.

Si aucune spécification de complètement n'est trouvée, bash effectue le complètement par défaut tel que décrit ci-dessus dans Complètement. Sinon, une fois qu'une spécification de complètement a été trouvée, bash l'utilise pour produire la liste des mots correspondants.

Tout d'abord, bash effectue les actions définies par la spécification de complètement. Cela renvoie uniquement les correspondances qui sont des préfixes du mot à compléter. Lorsque l'option -f ou -d est utilisée pour le complètement des noms de fichier ou de répertoire, bash utilise la variable d'interpréteur FIGNORE pour filtrer les correspondances.

Ensuite, le complètement programmable crée les correspondances indiquées par le motif de développement des chemins fourni comme argument à l'option -G. Il n'est pas nécessaire que les mots produits par le motif correspondent au mot à compléter. bash utilise la variable FIGNORE pour filtrer les correspondances, mais n'utilise pas la variable de l'interpréteur GLOBIGNORE.

Ensuite, le complètement prend en compte la chaîne indiquée comme argument à l'option -W. Cette chaîne est tout d'abord découpée en utilisant les caractères de la variable spéciale IFS comme délimiteurs. Cela respecte les protections de l'interpréteur à l'intérieur de la chaîne afin de fournir un mécanisme pour que les mots puissent contenir des métacaractères ou des mots de l'interpréteur dans la valeur de IFS. Chaque mot est ensuite développé en utilisant les développements d'accolades, du tilde, des paramètres et des variables, de même que la substitution de commande et le développement arithmétique comme décrit ci-dessus dans DÉVELOPPEMENTS. Les résultats sont découpés en utilisant les règles décrites ci-dessus dans Découpage en mots. Les résultats du développement sont comparés au mot à compléter en considérant ce dernier comme préfixe et les mots correspondants deviennent des complètements possibles.

Après la création de ces correspondances, bash exécute toute fonction de l'interpréteur ou commande indiquée avec les options -F et -C. Lorsque la commande ou la fonction est appelée, bash affecte des valeurs aux variables COMP_LINE, COMP_POINT, COMP_LINKEY et COMP_POINTYPE comme décrit ci-dessus dans Variables de l'interpréteur. Si une fonction de l'interpréteur est appelée, les variables COMP_WORDS et COMP_CWORD sont également créées. Lorsqu'une fonction ou une commande est appelée, le premier argument ($1) est le nom de la commande dont les arguments doivent être complétés, le deuxième argument ($2) est le mot à compléter et le troisième argument ($3) est le mot précédant celui devant être complété sur la ligne de commande actuelle. Il n'y a pas de filtrage des complètements produits pour le mot à compléter ; la fonction ou la commande ont toute liberté dans la production des correspondances et il n'est pas nécessaire qu'elles correspondent à un préfixe du mot.

Toute fonction indiquée avec -F est appelée en premier. La fonction peut utiliser tous les outils de l'interpréteur, incluant les commandes internes compgen et compopt décrites ci-dessous, pour produire les correspondances. Elle doit mettre les complètements possibles dans la variable tableau COMPREPLY, un par élément de tableau.

Ensuite, toute commande indiquée avec l'option -C est appelée dans un environnement équivalent à la substitution de commande. Elle doit afficher une liste des complètements possibles, un par ligne, sur la sortie standard. Si nécessaire, une contre-oblique va protéger un caractère de changement de ligne. Ils sont ajoutés à l'ensemble des complètements possibles.

Après la création de tous les complètements possibles, bash applique tout filtre, indiqué avec l'option -X, aux complètements de la liste. Ce filtre est un motif comme dans le développement des chemins ; un & dans le motif est remplacé par le texte du mot en cours de complètement. Un & littéral peut être protégé par une contre-oblique ; la contre-oblique est supprimée avant la tentative de mise en correspondance. Tout complètement qui correspond au motif est supprimé de la liste. Un ! au début du motif provoque la négation de ce motif ; dans ce cas, bash supprime tout complètement qui ne correspond pas au motif. Si l'option d'interpréteur nocasematch est activée, bash effectue la mise en correspondance sans tenir compte de la casse des caractères alphabétiques.

Finalement, la complétion programmable ajoute tout préfixe et suffixe indiqués avec les options -P et -S respectivement à chaque complètement et renvoie le résultat à readline comme étant la liste des complètements possibles.

Si les opérations précédemment appliquées ne produisent aucune correspondance et si l'option -o dirnames a été fournie à complete lorsque la spécification de complètement a été définie, bash tente le complètement des noms de répertoire.

Si l'option -o plusdirs a été fournie à complete lors de la définition de la spécification de complètement, bash tente le complètement des noms de répertoire et ajoute toute correspondance à l'ensemble des complètements possibles.

Par défaut, si une spécification de complètement est trouvée, tout ce qu'elle produit est renvoyé au programme de complètement comme un jeu complet des complètements possibles. Les complètements par défaut de bash et le complètement de nom de fichier par défaut de readline sont désactivés. Si l'option -o bashdefault a été fournie à complete lors de la définition de la spécification de complètement et que la spécification de complètement ne produit pas de correspondance, bash tente ses complètements par défaut. Si la spécification de complètement et, s'ils sont tentés, les complètements par défaut de bash ne produisent pas de correspondance et si l'option -o default a été fournie à complete lors de la définition de la spécification de complètement, le complètement programmable effectue le complètement par défaut de readline.

Les options fournies à complete et compopt peuvent contrôler la manière dont readline traite les complètements. Par exemple, l'option -o fullquote fait que readline protège les correspondances comme s'il s'agissait de noms de fichier. Voir la description de complete ci-dessous pour des détails.

Lorsqu'une spécification de complètement indique qu'elle veut un complètement de nom de répertoire, les fonctions de complètement programmable forcent readline à ajouter une barre oblique pour compléter les noms qui sont des liens symboliques vers des répertoires, selon la valeur de la variable mark-directories de readline, indépendamment du paramétrage de la variable mark-symlinked-directories de readline.

La modification dynamique des complètements est également possible. C'est particulièrement utile combiné avec un complètement par défaut indiqué à l'aide de complete -D. Les fonctions de l'interpréteur exécutées comme fonctions de complètement permettent d'annoncer que le complètement doit être réessayé en renvoyant un code de retour de 124. Si une fonction de l'interpréteur renvoie 124, et modifie la spécification de complètement associée à la commande sur laquelle le complètement est essayé (fournie comme premier argument quand la fonction est exécutée), le complètement programmable recommence depuis le début, en essayant de trouver une nouvelle spécification de complètement pour cette commande. Cela peut être utilisé pour construire un jeu de complètements dynamiquement lorsque le complètement est essayé, plutôt que de les charger tous en même temps.

Par exemple, en supposant l'existence d'une bibliothèque de spécifications de complètement, chacune conservée dans un fichier correspondant au nom de la commande, la fonction de complètement par défaut qui suit chargerait les complètements de façon dynamique :


_completion_loader() {
. "/etc/bash_completion.d/$1.sh".if 0<80n \
>/dev/null 2>&1 && return 124 } complete -D -F _completion_loader.if 0<80n \
-o bashdefault -o default

HISTORIQUE

Quand l'option -o history de la commande interne set est activée, l'interpréteur donne accès à un historique des commandes, c'est-à-dire la liste des commandes précédemment utilisées. La valeur de la variable HISTSIZE est utilisée comme nombre de commandes à sauvegarder dans la file d'historique : l'interpréteur sauvegarde le texte des HISTSIZE dernières commandes (par défaut 500). L'interpréteur conserve chaque commande dans la file d'historique avant le développement des paramètres et des variables (consultez DÉVELOPPEMENTS ci-dessus) mais après avoir effectué le développement de l'historique, selon les valeurs des variables de l'interpréteur HISTIGNORE et HISTCONTROL.

Au démarrage, bash initialise la file d'historique en lisant les entrées d'historique dans le fichier nommé par la variable HISTFILE (par défaut ~/.bash_history). Ce fichier est appelé le fichier d'historique. Si besoin, il est tronqué pour ne pas contenir plus que le nombre d'entrées d'historique spécifié par la valeur de la variable HISTFILESIZE. Si cette valeur est inexistante, ou définie à NULL, à une valeur non numérique ou à une valeur négative, le fichier d'historique n'est pas tronqué.

Quand le fichier d'historique est lu, les lignes commençant par le caractère de commentaire d'historique suivi immédiatement d'un chiffre sont considérés comme des horodatages de la ligne d'historique qui suit. Ces horodatages sont affichés facultativement en fonction de la valeur de la variable HISTTIMEFORMAT. Quand ils sont présents, les horodatages délimitent les entrées d'historique, rendant possibles les entrées multilignes.

Lorsqu'un interpréteur avec historique activé se termine, bash copie les HISTSIZE dernières lignes de la file d'historique dans le fichier HISTFILE. Si l'option d'interpréteur histappend est activée (consultez la description de shopt dans COMMANDES INTERNES DE L'INTERPRÉTEUR ci-dessous), bash ajoute les lignes au fichier d'historique, sinon il écrase le fichier. Si HISTFILE est inexistante ou NULL, ou si le fichier d'historique n'est pas accessible en écriture, l'historique n'est pas sauvegardé. Après la sauvegarde de l'historique, bash tronque le fichier d'historique pour ne pas contenir plus de HISTFILESIZE lignes comme décrit ci-dessus.

Si la variable HISTTIMEFORMAT est définie, l'interpréteur écrit l'information d'horodatage associée à chaque entrée d'historique dans le fichier d'historique, marquée du caractère de commentaire d'historique, ainsi les horodatages sont conservés d'une session d'interpréteur à l'autre. Cela utilise le caractère de commentaire d'historique pour distinguer l'horodatage des autres lignes de l'historique. Comme ci-dessus, quand HISTTIMEFORMAT est utilisée, les horodatages délimitent les entrées d'historique multilignes.

La commande interne fc (consultez COMMANDES INTERNES DE L'INTERPRÉTEUR ci-dessous) affichera, éditera ou réexécutera une partie de la file d'historique. La commande interne history peut afficher ou modifier la file d'historique et manipuler le fichier d'historique. Lors d'une édition en ligne de commande, les commandes de recherche sont disponibles dans chaque mode d'édition fournissant un accès à la file d'historique.

L'interpréteur permet de configurer quelles commandes seront sauvegardées dans la file d'historique. Les variables HISTCONTROL et HISTIGNORE sont utilisées pour faire que l'interpréteur ne sauvegarde qu'un sous-ensemble des commandes saisies. Si l'option d'interpréteur cmdhist est activée, l'interpréteur essaye de sauvegarder chaque ligne d'une commande multiligne dans le même élément de l'historique, en ajoutant des points-virgules si nécessaire pour préserver l'exactitude de la syntaxe. L'option d'interpréteur lithist modifie cmdhist en sauvegardant les commandes avec des changements de ligne incorporés plutôt que des points-virgules. Consultez ci-dessous la description de la commande interne shopt dans COMMANDES INTERNES DE L'INTERPRÉTEUR pour des détails sur la définition et la désactivation des options d'interpréteur.

DÉVELOPPEMENT DE L'HISTORIQUE

L'interpréteur propose des possibilités de développement de l'historique qui sont semblables à celles de csh. Ce paragraphe décrit quelles syntaxes sont disponibles.

Le développement d'historique est activé par défaut dans les interpréteurs interactifs et peut être désactivé en utilisant l'option +H de la commande interne set (consultez COMMANDES INTERNES DE L'INTERPRÉTEUR ci-dessous). Les interpréteurs non interactifs n'effectuent pas de développement d'historique par défaut, mais il peut être activé avec “set -H”.

Le développement de l'historique permet d'insérer des mots de la file d'historique dans le flux de saisie, facilitant la répétition de commandes, l'insertion des arguments d'une ligne antérieure dans la saisie en cours ou la correction rapide d'erreurs dans les commandes précédentes.

Le développement d'historique est effectué immédiatement après la lecture d'une ligne complète, avant que l'interpréteur la découpe en mots, et est réalisé sur chaque ligne individuellement. L'interpréteur tente d'informer les fonctions de développement d'historique sur les protections toujours en vigueur à partir des lignes précédentes.

Cela se déroule en deux étapes. La première consiste à déterminer l'entrée de la file d'historique à utiliser pendant la substitution et la seconde à sélectionner la partie de cette entrée à inclure dans l'entrée actuelle.

L'entrée sélectionnée dans l'historique est l'événement et les parties de cette entrée qui sont utilisées sont les mots. Divers modificateurs sont disponibles pour manipuler les mots sélectionnés. L'entrée est découpée en mots de la même manière que lors de la lecture d'entrée, de sorte que plusieurs mots séparés par des métacaractères entourés par des guillemets sont considérés comme un mot. L'indicateur d'événement sélectionne l'événement, l'indicateur de mots facultatif sélectionne les mots dans l'événement, et plusieurs modificateurs facultatifs sont disponibles pour manipuler les mots sélectionnés.

Les développements d'historique sont introduits par l'apparition du caractère de développement d'historique qui est ! par défaut. Les développements d'historique peuvent apparaître n'importe où dans l'entrée, mais ne sont pas être imbriqués.

Seules les contre-obliques (\) et les guillemets simples peuvent protéger le caractère de développement d'historique, mais ce caractère est aussi traité comme protégé s'il précède immédiatement le guillemet double fermant dans une chaîne encadrée par des guillemets doubles.

Plusieurs caractères empêchent le développement de l'historique s'ils se trouvent immédiatement après le caractère de développement de l'historique, même s'il n'est pas protégé : espace, tabulation, changement de ligne, retour chariot et =, ainsi que les autres métacaractères de l'interpréteur définis ci-dessus.

Il existe une abréviation particulière pour la substitution, active quand le caractère substitution rapide (décrit plus haut dans histchars) est le premier caractère de la ligne. Il sélectionne l'entrée précédente de la file d'historique, en utilisant un indicateur d'événement équivalent à !! et substitue une chaîne par une autre dans cette entrée. Il est décrit ci-dessous dans Indicateur d'événement. C'est le seul développement d'historique qui ne commence pas par le caractère de développement d'historique.

Plusieurs options d'interpréteur, configurables avec la commande interne shopt, vont modifier le comportement du développement de l'historique. (consultez la description de la commande interne shopt ci-dessous). Si l'option d'interpréteur histverify est activée et si readline est utilisée, les substitutions d'historique ne sont pas transmises tout de suite à l'analyseur de l'interpréteur. À la place, la ligne développée est rechargée dans le tampon d'édition de readline pour permettre des modifications ultérieures. Si readline est utilisée et si l'option histreedit est activée, une substitution d'historique qui échoue est rechargée dans la mémoire tampon de readline pour correction.

L'option -p de la commande interne history montre ce qu'une substitution donnera avant de l'employer réellement. L'option -s de la commande interne history ajoutera des commandes à la fin de la file d'historique sans les exécuter effectivement, afin qu'elles soient disponibles pour des rappels ultérieurs.

L'interpréteur offre le contrôle des divers caractères utilisés par le mécanisme de développement de l'historique (consultez la description de histchars ci-dessus dans Variables de l'interpréteur). L'interpréteur utilise le caractère de commentaire d'historique pour repérer l'horodatage lors de l'écriture du fichier d'historique.

Indicateur d'événement

Un indicateur d'événement est une référence à un élément dans la file d'historique. L'indicateur d'événement consiste en la partie du mot qui commence par le caractère de développement d'historique et se termine par l'indicateur de mot s'il existe ou la fin du mot. Sauf s'il s'agit d'une référence absolue, les événements sont relatifs à la position actuelle dans la file d'historique.

!
Débute une substitution d'historique, sauf s'il est suivi d'un blanc, d'un changement de ligne, d'un retour chariot, d'un = ou lorsque l'option d'interpréteur extglob est activée en utilisant la commande interne shopt, d'un (.
!n
Fait référence à l'entrée n de la file d'historique.
!-n
Fait référence à l'entrée actuelle moins n.
!!
Fait référence à l'entrée précédente. C'est un synonyme de “!-1”.
!chaîne
Fait référence à la commande la plus récente précédant la position actuelle dans la file d'historique commençant par chaîne.
!?chaîne[?]
Fait référence à la commande la plus récente précédant la position actuelle dans la file d'historique contenant chaîne. Le ? final peut être omis si chaîne est immédiatement suivie d'un changement de ligne. Si chaîne est absente, cela utilise la chaîne de la dernière recherche ; c'est une erreur s'il n'y a pas de chaîne de recherche précédente.
^chaîne_1^chaîne_2^
Substitution rapide, répète la commande précédente en remplaçant chaîne_1 par chaîne_2. Équivalent à “!!:s^string1^string2^” (consultez Modificateurs ci-dessous)
!#
La ligne de commande entière saisie jusqu'à présent.

Indicateurs de mots

Les indicateurs de mots servent à sélectionner les mots désirés dans un événement. Ils sont facultatifs ; si l'indicateur de mot n'est pas fourni, le développement d'historique utilise l'événement en entier. Un : sépare l'indicateur d'événement de l'indicateur de mots. On peut l'omettre si l'indicateur de mots commence par ^, $, *, - ou %. Les mots sont numérotés depuis le début de la ligne, le premier étant noté 0 (zéro). Les mots sont insérés dans la ligne actuelle, séparés par des espaces uniques.

0 (zéro)
Le zéroième mot. Pour l'interpréteur, c'est le mot de la commande.
Le n-ième mot.
^
Le premier argument : le mot 1.
$
Le dernier mot. C’est généralement le dernier argument, mais qui sera développé en zéroième mot s’il n’y a qu’un seul mot sur la ligne.
%
Le premier mot correspondant à la recherche “?string?” la plus récente, si la chaîne de recherche débute par un caractère qui fait partie d'un mot. Par défaut, les recherches commencent par la fin de chaque ligne et continuent jusqu'au début, ainsi le premier mot correspondant est celui qui est le plus près de la fin de la ligne.
Un intervalle de mots ; “-y” Abréviation de “0-y”.
*
Tous les mots sauf le zéroième. C'est un synonyme de “1-$”. Il n'est pas erroné d'utiliser * s'il n'y a qu'un mot dans l'événement ; il se développe en une chaîne vide dans ce cas.
Abréviation de x-$.
Abréviation de x-$ comme x*, mais sans le dernier mot. Si x est absent, la valeur par défaut est 0.

Si un indicateur de mot est fourni sans indication d'événement, la dernière commande est utilisée comme évènement, équivalent à !!.

Modificateurs

Après un indicateur de mot facultatif, le développement peut inclure une suite d'un ou plusieurs des modificateurs suivants, chacun précédé d'un “:”. Cela modifie ou corrige le ou les mots sélectionnés à partir de l'événement de l'historique.

Supprimer la fin d'un chemin d'accès, en ne gardant que le début.
Supprimer tout le début d'un chemin d'accès, en ne gardant que la fin.
Supprimer un suffixe final de la forme .xxx, en ne gardant que le nom de base.
Supprimer tout sauf le suffixe final.
Afficher la nouvelle commande sans l'exécuter.
Protéger les mots substitués, pour éviter d'autres substitutions.
Protéger les mots substitués comme avec q, mais avec séparation des mots aux blancs et changements de ligne. Les modificateurs q et x s'excluent mutuellement ; le développement utilise le dernier fourni.
Remplacer par nouveau la première occurrence de ancien sur la ligne d'événement. Tout caractère peut être utilisé comme délimiteur à la place de /. Le dernier délimiteur est facultatif si c'est le dernier caractère de la ligne d'événement. Une seule contre-oblique peut protéger le délimiteur dans ancien et nouveau . Si & apparaît dans nouveau, il est remplacé par ancien. Une seule contre-oblique protège le &. Si ancien est NULL, il est configuré au dernier ancien substitué ou si aucune substitution n'a eu lieu précédemment, à la dernière chaîne dans une recherche !?chaîne[?]. Si nouveau est NULL, chaque correspondance à ancien est supprimée.
&
Répéter la substitution précédente.
Appliquer les modifications sur toute la ligne d'événement. C'est utilisé conjointement avec “:s” (par exemple, “:gs/old/new/”) ou “:&”. Si utilisé avec “:s”, tout délimiteur peut être utilisé à la place de / et le dernier délimiteur est facultatif si c'est le dernier caractère de la ligne d'événement. Un a peut être utilisé en tant que synonyme de g.
Appliquer une fois le modificateur “s” ou “&” à tous les mots de la ligne d'événement.

COMMANDES INTERNES DE L'INTERPRÉTEUR

Sauf indication contraire, chaque commande interne décrite dans cette section comme acceptant des options précédées par - accepte également la notation -- pour signaler la fin des options. Les commandes internes true, false et test/[ n'acceptent aucune option et ne traitent pas -- particulièrement. Les commandes internes exit, logout, return, break, continue, let et shift acceptent et traitent les arguments commençant par - sans avoir besoin de --. Les autres commandes internes, qui acceptent des arguments mais qui ne sont pas explicitement comme acceptant des options, considèrent les arguments commençant par - comme des options non valables, donc -- est obligatoire pour éviter cette interprétation.

: [arguments]
Sans effet ; cette commande ne fait rien d'autre que développer les arguments et effectuer toute redirection indiquée. Le code de retour est zéro.
. [-p chemin] fichier [arguments]
La commande . (source) lit et exécute les commandes du fichier avec l'environnement de l'interpréteur en cours et renvoie le code de retour de la dernière commande exécutée à partir du ficher.
Si le nom du fichier ne contient pas de barre oblique, . le recherche. Si l'option -p est fournie, . considère chemin comme une liste de répertoires séparés par des deux-points dans laquelle rechercher le fichier ; sinon, . utilise les entrées de PATH pour trouver le répertoire renfermant le fichier. Le fichier n'a pas besoin d'être exécutable. Lorsque bash n'est pas en mode POSIX, il examine le répertoire de travail actuel si le fichier n'est pas trouvé dans PATH, mais ne recherche pas dans le répertoire actuel si -p est fourni.Si l'option sourcepath de la commande interne shopt est désactivée, . ne recherche pas dans PATH.
Si des arguments sont fournis, ils deviennent les paramètres positionnels quand le fichier est exécuté. Sinon, les paramètres positionnels ne sont pas modifiés.
Si l'option -T est activée, . hérite de toutes les captures de DEBUG ; si elle ne l'est pas, toutes les chaînes de capture de DEBUG sont sauvegardées et restaurées autour de l'appel à ., et . détruit les captures de DEBUG lors de son exécution. Si -T n'existe pas et si le fichier sourcé modifie la capture de DEBUG, la nouvelle valeur est conservée quand . se termine. Le code de retour est le code de retour de la dernière commande exécutée du fichier (0 si aucune commande n'a été exécutée) et différent de zéro si le fichier n'est pas trouvé ou ne peut pas être lu.
Sans argument ou avec l'option -p, la commande alias affiche sur la sortie standard la liste des alias actuellement définis, sous la forme nom=valeur. Lorsque des arguments sont fournis, cela définit un alias pour chaque nom auquel on a donné une valeur. Une espace finale dans une valeur conduira à la recherche d'alias dans le mot suivant lors du développement de l'alias durant l'analyse de la commande. Pour chaque nom dans la liste d'arguments sans valeur fournie, la commande affiche le nom et la valeur de l'alias. La commande alias renvoie vrai, à moins qu'un nom n'ait été indiqué (sans valeur correspondante) pour lequel aucun alias n'a été défini.
Reprendre en arrière-plan chaque tâche suspendue, comme si elle avait été lancée avec &. Si aucune tâche n'est présente, l'interpréteur utilise la notion de tâche actuelle. bg tâche renvoie 0 sauf si le contrôle des tâches est désactivé, ou, quand le contrôle des tâches est activé, si une tâche précisée n'a pas été trouvée ou a été lancée sans contrôle de tâches.
[bind [-m jeu_de_raccourcis] -x suite_de_touches[:] commande_de_l'interpréteur
Afficher les associations de touches readline actuelles et les raccourcis de fonctions, associer une séquence de touches à une fonction ou une macro readline ou une commande de l'interpréteur, ou créer une variable readline. Chaque argument qui n'est pas une option est un raccourci ou une commande comme elle devrait apparaître dans un fichier d'initialisation de readline tel que .inputrc, mais chaque raccourci ou commande doit être fourni comme un argument indépendant ; par exemple '"\C-x\C-r": re-read-init-file'. Dans les descriptions suivantes, la sortie disponible pour être relue est formatée comme les commandes qui doivent apparaître dans un fichier d'initialisation de readline ou qui doivent être fournies comme arguments individuels à une commande bind. Les options, si fournies, ont les significations suivantes :
Utiliser le jeu_de_raccourcis comme jeu de raccourcis devant être concerné par les raccourcis ultérieurs. Les noms de jeu_de_raccourcis possibles sont emacs, emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move, vi-command et vi-insert. vi est équivalent à vi-command (vi-move est aussi un synonyme) ; emacs est équivalent à emacs-standard.
Afficher la liste des noms de toutes les fonctions readline.
Afficher les noms des fonctions readline et leurs raccourcis de façon à pouvoir les utiliser comme argument pour une commande bind ultérieure ou dans un fichier d'initialisation de readline. S'il reste des arguments après le traitement de l'option, bind les traite comme des noms de commandes readline et limite la sortie à ces noms.
Afficher les noms des fonctions readline et leurs raccourcis actuels. S'il reste des arguments après le traitement de l'option, bind les traite comme des noms de commande readline et limite la sortie à ces noms.
Afficher les séquences de touches readline associées aux macros et les chaînes correspondantes, de façon à pouvoir les utiliser comme argument pour une commande bind ultérieure ou dans un fichier d'initialisation de readline.
Afficher les séquences de touches readline associées aux macros et les chaînes correspondantes.
Afficher les noms des variables readline et leurs valeurs de façon à pouvoir les utiliser comme argument pour une commande bind ultérieure ou dans un fichier d'initialisation de readline.
Afficher les noms des variables readline et leurs valeurs.
Lire les raccourcis clavier dans fichier.
Afficher les séquences de touches qui permettent d'appeler la fonction readline indiquée.
Dissocier toutes les séquences de touches associées à la fonction readline indiquée.
Supprimer tout raccourci actuel pour la suite_de_touches.
Faire que la commande_de_l'interpréteur soit exécutée chaque fois que la suite_de_touches est saisie. Le séparateur entre suite_de_touches et la commande_de_l'interpréteur est soit une espace, soit un deux-points facultatif suivi d'une espace. Si le séparateur est une espace, la commande_de_l'interpréteur doit être encadrée par des guillemets doubles et readline développe toutes les protections spéciales par contre-oblique dans la commande_de_l'interpréteur avant de la sauvegarder. Si le séparateur est un deux-points, les guillemets doubles encadrants sont optionnels et readline ne développe pas la chaîne de commande avant de la sauvegarder. Dans la mesure où toute l'expression de raccourci clavier doit être un argument unique, elle doit être encadrée de guillemets simples. Quand la commande_de_l'interpréteur est exécutée, l'interpréteur configure la variable READLINE_LINE au contenu du tampon de ligne de readline et les variables READLINE_POINT et READLINE_MARK à la position actuelle du curseur d'insertion et du point d'insertion sauvegardé (la marque) respectivement. L'interpréteur affecte tout argument numérique fourni par l'utilisateur à la variable READLINE_ARGUMENT. S'il n'y a pas d'argument, la variable n'existe pas. Si la commande exécutée modifie les valeurs de READLINE_LINE, READLINE_POINT ou READLINE_MARK, ces nouvelles valeurs seront prises en considération dans l'état édition.
Afficher toutes les séquences de touches associées aux commandes de l'interpréteur et aux commandes associées pour pouvoir être réutilisées en argument d'un bind ultérieur.

La valeur renvoyée est 0, à moins qu'une option inconnue ne soit fournie ou qu'une erreur ne se soit produite.

Sortir d'une boucle for, while, until ou select. Si n est indiqué, break sort de n niveaux de boucles. n doit être ≥ 1. Si n est supérieur au nombre de boucles imbriquées, sortir de toutes les boucles. La valeur renvoyée est 0, à moins que n ne soit pas supérieur ou égal à 1.
Exécuter la commande interne de l'interpréteur indiquée, en lui passant les arguments, puis renvoyer son code de retour. C'est utile lorsqu'une fonction est définie avec le même nom qu'une commande interne, et que cette commande est appelée depuis l'intérieur de la fonction. La commande interne cd est souvent redéfinie de cette façon. Le code de retour est faux si la commande_interne n'est pas une commande interne de l'interpréteur.
Renvoyer le contexte de tout appel de sous-programme actif (une fonction de l'interpréteur ou un script lancé avec les commandes internes . ou source).
Sans expr, caller affiche le numéro de ligne et le nom de fichier du sous-programme actuel. Si un entier non négatif est fourni comme expr, caller affiche le numéro de ligne, le nom du sous-programme et le nom de fichier source correspondant à la position dans la pile d'exécution d'appel actuelle. Cette information supplémentaire peut être utilisée, par exemple, pour afficher une trace de la pile. La trame actuelle est la trame 0.
La valeur renvoyée est 0, sauf si l'interpréteur n'est pas en train d'exécuter un sous-programme ou que expr ne correspond pas à une position valable dans la pile d'appel.
cd [-L] [-@] [rép]
Remplacer le répertoire de travail actuel par rép. Si rép n’est pas fourni, la valeur de la variable d’interpréteur HOME est utilisée comme rép. Si la variable CDPATH existe et si rép ne débute pas par une barre oblique (/), cd l'utilise comme chemin de recherche : l'interpréteur recherche rép dans chaque nom de répertoire de CDPATH. Les noms de répertoire alternatifs dans CDPATH sont séparés par un deux-points (:). Un nom de répertoire NULL dans CDPATH est l'équivalent du répertoire actuel, c'est-à-dire “.”.
L'option -P force cd à employer la structure de répertoires physique en résolvant les liens symboliques lors de la traversée rép et avant de traiter les instances de .. dans rép (consultez aussi l'option -P de la commande interne set).
L'option -L force cd à suivre les liens symboliques en les résolvant après le traitement des instances de .. dans rép. Si .. apparaît dans rép, cd le traite en supprimant le composant de chemin précédant directement rép, jusqu'à une barre oblique ou le début de rép et vérifie que la partie de rép qu'il a traité jusqu'à ce point est encore un nom de répertoire valable après la suppression du composant nom de chemin. Si ce n'est pas un nom de répertoire valable, cd renvoie un code de retour différent de zéro. Si ni -L ni -P ne sont fournis, cd se comporte comme si l'option -L était fournie.
Si l'option -e est fournie avec -P, et si cd ne peut pas déterminer avec succès le répertoire de travail actuel après un changement de répertoire réussi, cd renverra un code de retour différent de zéro.
Sur les systèmes qui le permettent, l'option -@ présente les attributs étendus associés à un fichier comme à un répertoire.
Un argument de - est converti en $OLDPWD avant de tenter le changement de répertoire.
Si cd utilise un nom de répertoire non vide de CDPATH ou si - est le premier argument et si le changement de répertoire réussit, cd écrit le chemin absolu du nouveau répertoire de travail sur la sortie standard.
Si le changement de répertoire réussit, cd définit la valeur de la variable d'environnement PWD au nom du nouveau répertoire et règle la variable d'environnement OLDPWD à la valeur du répertoire de travail en cours avant le changement.
La valeur renvoyée est vrai si le changement de répertoire a réussi, faux sinon.
La commande interne command exécute la commande avec les arguments indiqués, en supprimant le processus habituel de l'interpréteur de recherche des commandes. Seules les commandes internes ou les commandes trouvées dans PATH nommées commande sont exécutées. Si l'option -p est fournie, la recherche de la commande est effectuée en utilisant une valeur par défaut pour PATH garantissant de trouver tous les utilitaires standards.
Si l'option -V ou -v est fournie, command affiche une description de la commande. L'option -v n'affiche qu'un seul mot indiquant la commande ou le nom de fichier utilisé pour appeler la commande. L'option -V fournit une description plus prolixe.
Si l'option -V ou -v est fournie, le code de retour est zéro si la commande a été trouvée et différent de zéro sinon. Si aucune option n'est fournie et si une erreur s'est produite ou si la commande ne peut être trouvée, le code de retour est 127. Sinon, le code de retour de la commande interne command est celui de la commande.
Produire les correspondances des complètements possibles pour mot selon les options, qui peuvent être toute option acceptée par la commande interne complete à l'exception de -p, -r, -D, -E et -I, et écrit le résultat sur la sortie standard.
Si l'option -V est fournie, compgen conserve les complètements créés dans la variable de tableau indexé nom_de_variable au lieu de l'écrire sur la sortie standard.
Lors de l'utilisation des options -F ou -C, les diverses variables de l'interpréteur créées par les outils de complètement programmable, lorsque disponibles, n'auront pas de valeurs utilisables.
Les correspondances seront produites de la même façon que si le programme de complètement programmable les avait produites directement à partir d'une spécification de complètement avec les mêmes attributs. Si mot est indiqué, seuls les complètements qui correspondent à mot sont affichés ou stockés
La valeur renvoyée est vrai, sauf si une option non valable a été fournie ou si aucune correspondance n'a été produite.

[-G motif_glob] [-W liste_de_mots] [-F fonction] [-C commande]
[-X motif_filtre] [-P préfixe] [-S suffixe] nom [nom ...]
Indiquer la façon de compléter les arguments de chaque nom.
Si l'option -p est fournie ou si aucune option ou nom ne sont fournis, afficher les spécifications de complètement existantes de façon qu'elles puissent être réutilisées comme entrée. L'option -r retire une spécification de complètement à chaque nom fourni ou, si aucun nom n'est fourni, toutes les spécifications de complètement.
L'option -D indique que les autres options et actions fournies doivent s'appliquer au complètement de commande par “default” , c'est-à-dire le complètement essayé sur une commande pour laquelle aucun complètement n'a été préalablement défini. L'option -E indique que les autres options et actions fournies doivent s'appliquer au complètement de commande “empty” , c'est-à-dire le complètement essayé sur une ligne vide. L'option -I indique que les autres options et actions fournies doivent s'appliquer au complètement du premier mot de non affectation de la ligne ou après un délimiteur de commande comme ; ou |, ce qui est habituellement le complètement d'un nom de commande. Si plusieurs options sont fournies, l'option -D prend la préséance sur -E et les deux prennent la préséance sur -I. Si une des options -D, -E ou -I est fournie, tous les autres arguments de nom sont ignorés ; ces complètements ne s'appliquent qu'au cas précisé par l'option.
Le processus d'application de ces spécifications de complètement, lors d'une tentative de complètement de mot, est décrit above under Programmable Completion.
Les autres options, si indiquées, ont les significations suivantes. Les arguments des options -G, -W et -X (et, si nécessaire, les options -P et -S) doivent être protégées pour éviter leur développement avant que la commande interne complete ne soit appelée.
L'option_complètement commande plusieurs aspects du comportement des spécifications de complètement au-delà de la simple production de complètement. option_complètement peut être l'une des suivantes :
Effectuer le reste des complètements par défaut de bash si la spécification de complètement ne produit aucune correspondance.
Utiliser le complètement de nom de fichier par défaut de readline si la spécification de complètement ne produit aucune correspondance.
Effectuer le complètement de nom de répertoire si la spécification de complètement ne produit aucune correspondance.
Indiquer à readline que la spécification de complètement produit des noms de fichier, ainsi il peut effectuer tout traitement spécifique aux noms de fichier (comme ajouter une barre oblique aux noms de répertoire, protéger les caractères spéciaux ou supprimer les espaces de fin). Cette option est destinée à être utilisée avec les fonctions de l'interpréteur.
Indiquer à readline de protéger tous les mots complétés même s’il ne s’agit pas de noms de fichier.
Indiquer à readline de protéger les mots complétés s’il s’agit de noms de fichier (la protection des noms de fichier est active par défaut).
Indiquer à readline de ne pas trier par ordre alphabétique la liste des complètements possibles.
Indiquer à readline de ne pas ajouter une espace (comportement par défaut) aux mots complétés à la fin de la ligne.
Après la création de toutes les correspondances définies par la spécification de complètement, tenter un complètement de nom de répertoire et ajouter toutes les correspondances aux résultats des autres actions.
L'action peut être l'une des suivantes pour produire une liste des complètements possibles :
Noms d'alias. Peut également être indiquée avec -a.
Noms de variable de type tableau.
Noms de raccourci clavier readline.
Noms de commandes internes de l'interpréteur. Peut également être indiquée avec -b.
Noms de commande. Peut également être indiquée avec -c.
Noms de répertoire. Peut également être indiquée avec -d.
Noms de commandes internes de l'interpréteur désactivées.
Noms de commandes internes de l'interpréteur activées.
Noms de variables de l'interpréteur exportées. Peut également être indiquée avec -e.
Noms de fichier et de répertoire, similaire au complètement de nom de fichier de readline. Peut également être indiquée avec -f.
Noms de fonction de l'interpréteur.
Noms de groupe. Peut également être indiquée avec -g.
Sujets de l'aide acceptés par la commande interne help.
Noms de machine tels qu'ils sont extraits du fichier indiqué par la variable de l'interpréteur HOSTFILE.
Noms de tâche si le contrôle des tâches est actif. Peut également être indiquée avec -j.
Mots réservés de l'interpréteur. Peut également être indiquée avec -k.
Noms de tâches en cours d'exécution si le contrôle des tâches est actif.
Noms de service. Peut également être indiquée avec -s.
Arguments valables de l'option -o de la commande interne set.
Noms des options d'interpréteur acceptées par la commande interne shopt.
Noms de signaux.
Noms de tâches suspendues si le contrôle des tâches est actif.
Noms d'utilisateur. Peut également être indiquée avec -u.
Noms de toutes les variables de l'interpréteur. Peut également être indiquée avec -v.
La commande est exécutée dans un environnement de sous-interpréteur et sa sortie est utilisée comme complètements possibles. Les arguments sont fournis comme avec la fonction -F.
La fonction de l'interpréteur est exécutée dans l'interpréteur actuel. Lorsqu'une fonction est exécutée, le premier argument ($1) est le nom de la commande dont les arguments doivent être complétés, le deuxième argument ($2) est le mot à compléter et le troisième argument ($3) est le mot précédant celui devant être complété sur la ligne de commande actuelle. Lorsque la fonction se termine, le complètement programmable récupère les complètements possibles à partir de la valeur de la variable de type tableau COMPREPLY.
Développer le motif de développement des chemins motif_glob pour produire les complètements possibles.
Ajouter préfixe au début de chaque complètement possible après application de toutes les autres options.
Ajouter suffixe à chaque complètement possible après application de toutes les autres options.
Découper la liste_de_mots en utilisant les caractères de la variable spéciale IFS comme délimiteurs et développer chaque mot résultant. Les protections de l'interpréteur sont prises en compte à l'intérieur de la liste_de_mots, afin de fournir un mécanisme pour que les mots puissent contenir des métacaractères ou des caractères de l'interpréteur dans la valeur de IFS. Les complètements possibles sont les éléments de la liste résultante qui correspondent à un préfixe du mot en cours de complètement.
motif_filtre est un motif utilisé pour le développement des chemins. Il est appliqué à la liste des complètements possibles produite par les options et arguments précédents et chaque complètement correspondant à motif_filtre est supprimé de la liste. Un ! au début du motif_filtre inverse le motif ; dans ce cas, tout complètement qui ne correspond pas à motif_filtre est supprimé.

La valeur renvoyée est vrai, sauf si une option non valable a été fournie, si une option comme -p -r, -D, -E ou -I a été fournie sans un nom d'argument, si une tentative a été faite pour supprimer une spécification de complètement pour un nom pour lequel il n'existe pas de spécification, ou si une erreur est survenue lors de l'ajout d'une spécification de complètement.

Modifier les options de complètement pour chaque nom en fonction des options, ou pour le complètement en cours d'exécution si aucun nom n'est fourni. Si aucune option n'est donnée, afficher les options de complètement pour chaque nom ou pour le complètement actuel. Les valeurs possibles d’option sont les valeurs valables décrites ci-dessus pour la commande interne complete.
L'option -D indique que les autres options fournies doivent s'appliquer au complètement de commande par “default” , l'option -E indique que les autres options fournies doivent s'appliquer au complètement de commande “empty” et l'option -I indique que les autres options fournies doivent s'appliquer au complètement du premier mot de la ligne. Ces options sont déterminées de la même manière que pour la commande interne complete.
Si plusieurs options sont fournies, l'option -D prend la préséance sur -E et les deux prennent la préséance sur -I.
La valeur renvoyée est vrai, à moins qu'une option non valable ait été fournie, qu'une tentative ait été faite pour modifier les options pour un nom pour lequel il n'existe pas de spécification de complètement, ou bien qu'une erreur de sortie soit survenue.
continue reprend l'exécution à l'itération suivante d'une boucle for, while, until ou encore select. Si n est indiqué, bash reprend l'exécution à la n-ième boucle imbriquée. n doit être ≥ 1. Si n est supérieur au nombre de boucles imbriquées, l'interpréteur reprend la boucle la plus externe (la boucle “top-level” ). La valeur renvoyée est 0, à moins que n ne soit pas supérieur ou égal à 1.
Déclarer des variables ou leur fournir des attributs. Si aucun nom n'est indiqué, afficher les valeurs des variables ou des fonctions. L'option -p affichera les attributs et les valeurs de chaque nom. Quand -p est utilisée avec des arguments nom, les options supplémentaires, à part -f et -F, sont ignorées.
Quand -p est fourni sans argument nom, declare affichera les attributs et les valeurs de toutes les variables ayant les attributs indiqués par les options additionnelles. Si aucune autre option n'est fournie avec -p, declare affichera les attributs et valeurs de toutes les variables de l'interpréteur. L'option -f limite l'affichage aux fonctions de l'interpréteur.
L'option -F empêche l'affichage des définitions de fonctions ; seuls le nom de la fonction et ses attributs sont affichés. Si l'option d'interpréteur extdebug est activée en utilisant shopt, le nom du fichier source et le numéro de ligne où chaque nom est défini sont aussi affichés. L'option -F implique -f.
L'option -g force la création ou la modification de variables avec une portée globale, même si declare est exécutée dans une fonction de l'interpréteur. Elle est ignorée si declare n'est pas exécutée dans une fonction de l'interpréteur.
L'option -I fait que les variables locales héritent des attributs (sauf de l'attribut nameref) et prennent la valeur de n'importe quelle variable existante de même nom dans son environnement. S'il n'y a pas de variable existante, la variable locale est détruite dans un premier temps.
Les options suivantes permettent de restreindre l'affichage aux variables dotées de l'attribut indiqué ou de configurer les attributs des variables :
Chaque nom est une variable de tableau indicé (consultez Tableaux). above).
Chaque nom est une variable de type tableau associatif (consultez Tableaux). above).
Chaque nom se rapporte à une fonction de l'interpréteur.
La variable est traitée comme un entier ; l'évaluation arithmétique (consultez ÉVALUATION ARITHMÉTIQUE above) est effectuée lorsqu'une valeur est affectée à la variable.
Quand cette variable contient une valeur, toutes les capitales seront converties en minuscules. L'attribut capitale est désactivé.
Donner à chaque nom l'attribut nameref, le transformant en référence de nom vers une autre variable. Cette autre variable est définie par la valeur de nom. Toutes les références, les affectations et les modifications d'attribut de nom, à part celles qui utilisent ou modifient l'attribut -n lui-même, sont réalisées sur la variable référencée par la valeur de nom. L'attribut nameref ne peut pas être appliqué aux variables de type tableau.
Rendre les noms accessibles en lecture seule. Plus aucune valeur ne pourra leur être affectée et ils ne pourront plus être détruits.
Donner à chaque nom l'attribut trace. Les fonctions tracées héritent des captures de DEBUG et RETURN de l'interpréteur appelant. L'attribut trace n'a pas de signification spéciale pour les variables.
Quand cette variable contient une valeur, toutes les minuscules seront converties en capitales. L'attribut minuscule est désactivé.
Marquer chaque nom pour qu'ils soient exportés dans l'environnement des commandes ultérieures.

L'utilisation de “+” à la place de “-” désactive plutôt l'attribut indiqué, excepté que +a et +A ne peuvent pas être utilisés pour détruire une variable tableau et que +r n'enlèvera pas l'attribut lecture seule.

Quand ils sont utilisés dans une fonction, declare et typeset rendent local chaque nom, comme avec la commande local sauf si l'option -g est fournie. Si un nom de variable est suivi de =valeur, la valeur de cette variable est configurée à valeur. Lors de l'utilisation de -a ou -A et de la syntaxe d’affectation composée pour créer des variables de type tableau, les attributs supplémentaires sont sans effet jusqu'aux affectations suivantes.

La valeur renvoyée est 0, sauf si une option non valable est rencontrée, une tentative est faite de définir une fonction en utilisant “-f foo=bar”, une tentative est faite pour affecter la valeur à une variable en lecture seule, une tentative est faite d'affecter une valeur à une variable tableau sans employer la syntaxe d'affectation composée (consultez Tableaux above), un des noms n'est pas un nom valable pour une variable de l'interpréteur, une tentative est faite de supprimer l'attribut lecture seule d'une variable en lecture seule, une tentative est faite de supprimer l'attribut tableau d'une variable tableau ou une tentative est faite avec -f d'afficher une fonction inexistante.

Sans option, afficher la liste des répertoires actuellement mémorisés. L'affichage par défaut est réalisé sur une seule ligne, les noms des répertoires étant séparés par des espaces. Les répertoires sont ajoutés à la liste avec la commande pushd et supprimés avec la commande popd. Le répertoire courant est toujours le premier répertoire de la pile.
Les options, si elles sont fournies, ont les significations suivantes :
Effacer la liste des répertoires en supprimant toutes les entrées.
Produire une liste en utilisant les chemins complets ; le format d'affichage par défaut utilise le tilde pour représenter le répertoire personnel (home).
Afficher la pile des répertoires avec un élément par ligne.
Afficher la pile des répertoires avec un élément par ligne, en préfixant chaque entrée avec son numéro d'indice dans la pile.
+n
Afficher le n-ième élément à partir de la gauche de la liste affichée par dirs lorsqu'appelé sans options, en commençant à zéro.
Afficher le n-ième élément à partir de la droite de la liste affichée par dirs lorsqu'appelé sans options, en commençant à zéro.

La valeur renvoyée est 0, sauf si une option non valable a été fournie ou si l'indice n dépasse la longueur de la pile des répertoires.

Sans options, supprimer chaque id de la table des tâches actives. Chaque id peut être une spécification de tâche (jobspec) ou un identifiant de processus pid ; si id est un pid, disown utilise la tâche contenant pid comme tâche.
Si l'option -h est fournie, disown ne supprime pas les tâches correspondant à chaque id de la table des tâches, mais les marque plutôt pour que l'interpréteur n'envoie pas de signal SIGHUP à la tâche s'il reçoit un SIGHUP.
Si aucun id n'est fourni, l'option -a signifie la suppression ou le marquage de toutes les tâches ; l'option -r sans l'argument id supprime ou marque les tâches en cours d'exécution. Si aucun id n'est fourni, et que ni l'option -a, ni l'option -r ne sont fournies, disown supprime ou marque la tâche en cours.
La valeur renvoyée est 0, sauf si une id n'indique pas une tâche valable.
Afficher les arguments, séparés par des espaces, suivis d'un saut de ligne. La valeur renvoyée est 0 sauf en cas d’erreur en écriture. Si -n est indiqué, le saut de ligne final n'est pas affiché.
Si l'option -e est indiquée, echo interprète les caractères suivants protégés par une contre-oblique. L'option -E désactive l'interprétation de ces caractères de protection, même sur les systèmes où ils sont interprétés par défaut. L'option d'interpréteur xpg_echo détermine si echo développe ou non par défaut ces caractères de protection. echo n'interprète pas -- comme signifiant la fin des options.
echo reconnaît les séquences de caractères de protection suivants :
alerte (alarme)
espace arrière
supprime tout affichage suivant
caractère de protection
saut de page (« form feed »)
saut de ligne (« new line »)
retour chariot
tabulation horizontale
tabulation verticale
\\
contre-oblique
\0nnn
le caractère 8 bits dont la valeur en octal est nnn (zéro à trois chiffres octaux)
le caractère 8 bits dont la valeur hexadécimale est HH (un ou deux chiffres hexadécimaux)
le caractère Unicode (ISO/IEC 10646) dont la valeur hexadécimale est HHHH (un à quatre chiffres hexadécimaux)
le caractère Unicode (ISO/IEC 10646) dont la valeur hexadécimale est HHHHHHHH (un à huit chiffres hexadécimaux)

echo écrit tout caractère non reconnu protégé par une contre-oblique sans le modifier.

Activer ou désactiver les commandes internes de l'interpréteur. Désactiver une commande interne permet d'exécuter un fichier exécutable ayant le même nom qu'une commande interne de l'interpréteur, sans avoir à indiquer un chemin d'accès complet, même si l'interpréteur recherche normalement les commandes internes avant les fichiers.

Si -n est utilisé, chaque nom indiqué est désactivé, sinon les noms sont activés. Par exemple, pour utiliser le programme binaire test qui se trouve dans PATH plutôt que la commande interne, utilisez “enable -n test”.
Si aucun argument nom n'est indiqué ou si l'option -p est fournie, afficher une liste des commandes internes de l'interpréteur. Sans autre argument d'option, la liste est celle des commandes internes actives de l'interpréteur. Si -n est fournie, afficher seulement les commandes désactivées. Si -a est fournie, la liste affichée inclut toutes les commandes internes, avec une indication des activations et désactivations. L'option -s signifie limiter la sortie aux commandes internes spéciales POSIX.
L'option -f signifie charger la nouvelle commande interne nom depuis le fichier objet partagé sur les systèmes qui prennent en charge le chargement dynamique. Si fichier ne contient pas de barre oblique, bash utilisera la valeur de la variable BASH_LOADABLES_PATH comme une liste de répertoires séparés par des deux-points dans laquelle rechercher le fichier. La valeur par défaut de BASH_LOADABLES_PATH dépend du système et peut comprendre un “.” pour forcer une recherche dans le répertoire actuel. L'option -d supprimera une commande interne précédemment chargée avec -f. Si -s est utilisée avec -I, la nouvelle commande interne devient une commande interne spéciale POSIX.
Si aucune option n'est fournie et si nom n'est pas une commande interne de l'interpréteur, enable tentera de charger nom à partir d'un objet partagé nommé nom comme si la commande était “enable -f name name”.
La valeur renvoyée est 0 à moins que nom ne soit pas une commande interne de l'interpréteur ou qu'il y ait une erreur au chargement d'une nouvelle commande interne d'un objet partagé.
Concaténer les arguments en une seule commande simple, en les séparant par des espaces. bash lit et exécute alors cette commande et renvoie son code de retour comme code de retour de la commande eval. S'il n'y a pas d'arguments ou uniquement des arguments NULL, eval renvoie 0.
Si une commande est indiquée, elle remplace l'interpréteur sans créer de nouveau processus. La commande ne peut pas être une commande interne ou une fonction de l'interpréteur. Les arguments deviennent ceux de la commande. Si l'option -l est fournie, l'interpréteur place un tiret en début du zéroième argument fourni à la commande. C'est ce que fait login(1). L'option -c conduit à l'exécution de la commande avec un environnement vide. Si l'option -a est fournie, l'interpréteur transmet le nom comme zéroième argument à la commande exécutée.
Si la commande ne peut pas être exécutée pour une raison quelconque, un interpréteur non interactif termine, sauf si l'option de l'interpréteur execfail est activée. Dans ce cas, il renvoie un code de retour différent de zéro. Un interpréteur interactif renvoie un code de retour différent de zéro si le fichier ne peut pas être exécuté. Un sous-interpréteur termine sans conditions si exec échoue.
Si aucune commande n'est indiquée, toutes les redirections sont mises en place dans l'interpréteur actuel et le code de retour est 0. S'il y a une erreur de redirection, le code de retour est 1.
Faire que l'interpréteur se termine avec un code de n. Si n est omis, le code de retour est celui de la dernière commande exécutée. Toute capture de EXIT est exécutée avant que l'interpréteur ne se termine.
Les noms fournis sont marqués pour être exportés automatiquement dans l'environnement des commandes exécutées par la suite. Si l'option -f est indiquée, les noms font référence à des fonctions.
L'option -n cesse d'exporter chaque nom, ou supprime son attribut d'exportation. Si aucun nom n'est donné ou si seule l'option -p est fournie, export affiche une liste des noms de toutes les variables exportées sur la sortie standard. L'utilisation conjointe des options -p et -f affiche les fonctions exportées. L'option -p affiche la sortie sous une forme qui peut être réutilisée en entrée.
export permet de définir la valeur d'une variable quand elle est exportée ou non exportée en faisant suivre le nom de variable de =valeur. Cela définit la valeur de la variable à valeur tout en modifiant l'attribut d'export. export renvoie un code de retour de 0, sauf si une option non valable est rencontrée, si un des noms n'est pas un nom valable de variable de l'interpréteur, ou si l'option -f est fournie avec un nom qui n'est pas une fonction.
Ne fait rien ; renvoie un code de retour différent de zéro.
La première forme sélectionne un intervalle de commandes de la première à la dernière dans la file d’historique et l'affiche ou l'édite pour les réexécuter. La première et la dernière peuvent être indiquées sous forme de chaînes (pour trouver la dernière commande commençant par cette chaîne) ou sous forme numérique (un indice dans la file d'historique où un nombre négatif est utilisé comme décalage par rapport au numéro de la commande actuelle).
Pour une la liste, une valeur de première ou dernière égale à 0 est équivalente à -1, et -0 est équivalent à la commande actuelle (habituellement la commande fc) ; autrement, 0 est équivalent à -1 et -0 n'est pas valable. Si dernière n'est pas indiquée, elle est configurée à la commande actuelle si l'on veut afficher la liste (ainsi “fc -l -10” affiche les 10 dernières commandes) et la première sinon. Si la première n'est pas indiquée, elle est configurée à la commande précédente pour une édition et à -16 pour l'affichage de la liste.
Si l'option -l est fournie, les commandes sont listées sur la sortie standard. L'option -n supprime les numéros de commande dans la liste. L'option -r inverse l'ordre des commandes.
Sinon, fc appelle l'éditeur désigné par éditeur avec un fichier contenant les commandes sélectionnées. Si aucun éditeur n'est fourni, fc utilise la valeur de la variable FCEDIT et la valeur de EDITOR si FCEDIT n'existe pas. Si aucune variable n'existe, fc utilise vi. Lorsque l'édition se termine, fc lit le fichier contenant les commandes éditées puis les affiche et les exécute.
Dans la seconde forme, fc exécute à nouveau la commande après avoir remplacé chaque instance du motif par nouveau. commande est interprétée de la même façon que première ci-dessus.
Un alias utile pour fc est “r=fc”-s(dq" ainsi en tapant “r cc” on relance la dernière commande commençant par “cc” et en tapant “r” on réexécute la commande précédente.
Lorsque la première forme est utilisée, la valeur renvoyée est zéro, sauf si une option non valable est rencontrée ou si première ou dernière indiquent des lignes d'historique hors d'atteinte. Lors de l'édition et de la nouvelle exécution d'un ficher de commandes, la valeur renvoyée est celle de la dernière commande exécutée ou échec si une erreur s'est produite avec le fichier temporaire. Avec la seconde forme, le code de retour est celui de la commande réexécutée, sauf si commande n'indique pas une entrée valable de l'historique, auquel cas fc renvoie un code de retour différent de zéro.
Reprendre la tâche au premier plan qui devient la tâche actuelle. Si aucune tâche n'est précisée, fg utilise la notion de tâche actuelle de l'interpréteur. La valeur renvoyée est celle de la commande placée au premier plan ou échec si le contrôle des tâches est désactivé ou, lorsque le contrôle des tâches est activé, si la tâche n'indique pas une tâche valable ou si la tâche indique une tâche lancée sans contrôle des tâches.
getopts est utilisé par les scripts et les fonctions d'interpréteur pour analyser les paramètres positionnels et obtenir des options et leurs arguments. La chaîne_d_options contient l'ensemble des caractères d'option à reconnaître ; si un caractère est suivi d'un deux-points, l'option est censée avoir un argument, qui doit en être séparé par une espace. Les caractères deux-points et le point d'interrogation ne peuvent pas être utilisés comme caractères d'option.
À chaque appel, getopts place l'option suivante dans la variable de l'interpréteur nom, initialisant noms'il n'existe pas, et l'indice de l'argument suivant à traiter dans la variable OPTIND. OPTIND est initialisée à 1 à chaque appel d'un interpréteur ou d'un script. Quand une option nécessite un argument, getopts place cet argument dans la variable OPTARG.
L'interpréteur ne réinitialise pas OPTIND automatiquement, il faut le faire manuellement entre des appels multiples à getopts au sein du même appel d'interpréteur pour utiliser un nouveau jeu de paramètres.
Lorsqu'il atteint la fin des options, getopts termine avec une valeur renvoyée strictement supérieure à zéro. OPTIND est positionné à l'indice du premier argument obligatoire et un point d'interrogation (?) est placé dans la variable nom.
getopts analyse en principe les paramètres positionnels, mais si plus d'arguments sont indiqués comme valeur d'arguments, getopts analysera ces derniers à la place.
getopts peut signaler des erreurs de deux façons. Si le premier caractère de la chaîne_d_options est un deux-points, getopts signale les erreurs de façon silencieuse. Lors d'un fonctionnement normal, getopts affiche des messages de diagnostic s'il rencontre des options non valables ou s'il manque un argument d'option. Si la variable OPTERR est configurée à 0, getopts n'affiche aucun message d'erreur, même si le premier caractère de la chaîne_d_options n'est pas un deux-points.
Si getopts détecte une option non valable, il place un point d'interrogation (?) dans la variable nom, affiche un message d'erreur (s'il n'est pas en mode silencieux) et détruit la variable OPTARG. Si getopts fonctionne en mode silencieux, il affecte le caractère d'option trouvé à OPTARG et aucun message de diagnostic n'est affiché.
Lorsqu'un argument d'option nécessaire est absent et si getopts n'est pas silencieux, il définit la valeur de nom à un point d'interrogation (?), il détruit OPTARG et affiche un message de diagnostic. Si getopts est silencieux, il définit la valeur de nom à un deux-points (:) et définit la valeur de OPTARG au caractère d'option trouvé.
getopts renvoie vrai si une option, indiquée ou non, est trouvée. Il renvoie faux si la fin des options est atteinte ou si une erreur se produit.
Chaque fois que hash est invoquée, elle mémorise le chemin complet de la commande nom comme déterminé en examinant les répertoires de $PATH. Tous les chemins précédemment mémorisés associés à nom sont supprimés. Si l'option -p est fournie, hash utilise fichier comme chemin d'accès complet pour la commande.
L'option -r fait que l'interpréteur oublie tous les emplacements mémorisés. Une affectation à la variable PATH efface aussi tous les noms de fichier hachés. L'option -d fait que l'interpréteur oublie tous les emplacements mémorisés de chaque nom.
Si l'option -t est fournie, hash affiche le chemin complet correspondant à chaque nom. Si plusieurs arguments de nom sont fournis avec -t, hash affiche le nom avant le chemin complet haché correspondant. L'option -L affiche la sortie dans un format qui peut être réutilisé en entrée.
Si aucun argument n'est fourni, ou si seul -l est fourni, hash affiche des informations sur les commandes mémorisées. Les options -t, -d et -p (les options qui opèrent sur les arguments de nom) s'excluent mutuellement. Une seule option sera active. Si plus d'une est fournie, -t a une priorité plus élevée que -p et toutes les deux ont une priorité plus élevée que -d.
Le code de retour est zéro, sauf si un nom n'est pas été trouvé ou si une option non valable est fournie.
Afficher des informations d'aide au sujet des commandes internes. Si un motif est indiqué, help fournit une aide détaillée sur toutes les commandes internes correspondant à ce motif comme décrit ci-dessous, sinon, il affiche une liste des commandes internes et des commandes composées de l'interpréteur.
Les options, si elles sont fournies, ont les significations suivantes :
-d
Afficher une courte description de chaque motif.
Afficher la description de chaque motif dans un format du type page de manuel.
Afficher seulement un court synopsis d'utilisation de chaque motif.
Si motif contient des caractères correspondant au motif (voir Motifs génériques ci-dessus), il est traité comme un motif de l'interpréteur et help affiche la description de chaque sujet de l'aide correspondant au motif.
Sinon, et si motif correspond exactement au nom d'un sujet de l'aide, help affiche la description associée à ce sujet. Autrement, help effectue une correspondance de préfixe et affiche les descriptions de tous les sujets de l'aide correspondants.
Le code de retour est 0, sauf si aucune commande ne correspond au motif.
Sans options, afficher la liste des commandes de la file d'historique, avec des numéros. Les lignes préfixées par un * ont été modifiées. Un argument n permet de n'afficher que les n dernières entrées. Si la variable de l'interpréteur HISTTIMEFORMAT existe et n'est pas NULL, elle est utilisée comme chaîne de format pour strftime(3) afin d'afficher l'horodatage associé à chaque élément de l'historique. Si history utilise HISTTIMEFORMAT, il n'affiche pas d'espace intermédiaire entre l'horodatage formaté et l'entrée d'historique.

Si fichier est fourni, history l'utilise comme nom de fichier d'historique ; sinon, il utilise la valeur de HISTFILE. Si aucun fichier n'est fourni et si HISTFILE est inexistant ou NULL, les options -a, -n, -r, et -w n'ont pas d'effet.
Les options, si elles sont fournies, ont les significations suivantes :
Effacer la liste d'historique en supprimant toutes les entrées. Cela peut être utilisé avec les autres options pour remplacer la liste d'historique.
Supprimer l'entrée d'historique à la position nombre. Si nombre est négatif, il est interprété comme relatif à un nombre plus grand que celui de la dernière position de l'historique, ainsi les indices négatifs comptent à rebours depuis la fin de l'historique et un indice -1 fait référence à la commande history -d actuelle.
Supprimer la plage d'entrées d'historique entre les positions début et fin incluses. Les valeurs positives et négatives pour début et fin sont interprétées comme décrites ci-dessus.
Ajouter les “new” lignes d'historique dans le fichier d'historique. Ce sont celles créées depuis le début de la session actuelle de bash, mais pas encore ajoutées dans le fichier d'historique.
Lire dans le fichier d'historique les lignes non encore lues et les ajouter à la file d'historique actuelle. Il s'agit des lignes qui ont été ajoutées dans le fichier d'historique depuis le début de la session bash.
Lire le fichier d'historique et ajouter son contenu à la file d'historique actuelle.
Écrire la file d’historique actuelle dans le fichier d’historique, en écrasant le fichier.
Effectuer la substitution d'historique sur les arguments suivants et afficher le résultat sur la sortie standard sans stocker les résultats dans la file d'historique. Chaque argument doit être protégé pour désactiver le développement normal de l'historique.
Conserver les arguments dans la file d'historique comme un unique élément. La dernière commande de la file d'historique est supprimée avant d'ajouter les arguments.
Si la variable HISTTIMEFORMAT existe, history écrit les informations d'horodatage associées à chaque élément de l'historique dans le fichier d'historique, repérées par le caractère de commentaire d'historique, comme décrit ci-dessus. Quand le fichier d'historique est lu, les lignes commençant par le caractère de commentaire d'historique suivi immédiatement d'un chiffre sont considérés comme des horodatages de la ligne d'historique précédente.
La valeur renvoyée est 0, sauf si une option non valable est fournie, si une erreur se produit durant la lecture ou l'écriture du fichier, si une plage ou un nombre non valable sont fournis comme argument à -d ou si le développement de l'historique fourni en argument à -p échoue.
La première forme affiche la liste des tâches actives. Les options ont les significations suivantes :
Afficher les PID, en plus des informations normales.
Afficher uniquement des informations sur les tâches dont l'état a changé depuis la dernière notification de leur état à l'utilisateur.
Afficher uniquement le PID du meneur du groupe de processus de la tâche.
N’afficher que les tâches en cours d'exécution.
N’afficher que les tâches suspendues.
Si une tâche est indiquée, jobs restreint l'affichage aux informations relatives à cette tâche. Le code renvoyé est 0, sauf si une option non valable est rencontrée ou si une tâche non valable est fournie.
Si l'option -x est fournie, jobs remplace toute tâche trouvée dans la commande ou dans ses arguments par l'ID de groupe de processus correspondant, puis il exécute la commande en lui transmettant les arguments et en renvoyant son code de retour.
Envoyer le signal indiqué par signal ou num-signal aux processus indiqués par chaque id qui peut être une spécification de tâche (jobspec) ou un identifiant de processus pid. signal est soit un nom de signal (insensible à la casse), comme SIGKILL (avec ou sans le préfixe SIG), soit un numéro de signal ; num-signal est un numéro de signal. Si signal est absent, kill envoie SIGTERM.
L'option -l affiche la liste des noms de signal. Si des arguments sont fournis quand -l est indiqué, kill liste les noms des signaux correspondant aux arguments et le code de retour est 0. L'argument code_de_retour de l'option -l est un nombre indiquant soit un numéro de signal, soit le code de retour d'un processus terminé par un signal ; s'il est indiqué, kill affiche le nom du signal qui a provoqué la fin du processus. kill suppose que les codes de retour des processus sont supérieurs à 128 ; tout nombre inférieur est un numéro de signal. L'option -L est équivalente à -l.
kill renvoie vrai si au moins un signal a été envoyé avec succès ou faux si une erreur s'est produite ou si une option non valable a été rencontrée.
Chaque argument est évalué comme une expression arithmétique (consultez ÉVALUATION ARITHMÉTIQUE above). Si l'évaluation du dernier argument donne 0, let renvoie 1 ; sinon let renvoie 0.
Pour chaque argument, créer une variable locale nom et lui assigner une valeur. L'option peut être n'importe quelle option acceptée par declare. Quand local est utilisé dans une fonction, cela fait que la variable nom possède une portée visible restreinte à cette fonction et ses enfants. C'est une erreur d'utiliser local en dehors d'une fonction.
Si nom est -, l'ensemble d'options de l'interpréteur devient local à la fonction dans laquelle local est invoquée : les options de l'interpréteur, modifiées en utilisant la commande interne set dans la fonction après l'appel à local, sont restaurées à leur valeur originale quand la fonction redonne la main. La restauration est effectuée comme si une série de commandes set avaient été exécutées pour restaurer les valeurs qui étaient en place avant la fonction.
Sans opérande, local affiche la liste des variables locales sur la sortie standard.
Le code de retour est 0, sauf si local est utilisé en dehors d'une fonction, si un nom non valable est fourni ou si nom est une variable en lecture seule.
Terminer un interpréteur de connexion et renvoyer un état de n au parent de l'interpréteur.
Lire les lignes depuis l'entrée standard ou depuis le descripteur de fichier df, si l'option -u est fournie, dans la variable de type tableau indicé tableau. La variable MAPFILE est le tableau par défaut. Les options, si fournies, ont les significations suivantes :
Utiliser le premier caractère de délimiteur pour terminer chaque ligne de saisie, plutôt qu'un changement de ligne. Si délimiteur est une chaîne vide, mapfile termine une ligne quand il lit un caractère NULL.
Copier au plus nombre lignes. Si nombre est 0, copier toutes les lignes.
Commencer l'affectation de tableau à l'indice origine. L'indice par défaut est 0.
Supprimer les nombre premières lignes lues.
Éliminer un délimiteur final (par défaut un changement de ligne) de chaque ligne lue.
Lire les lignes à partir du descripteur de fichier df plutôt que depuis l'entrée standard.
Évaluer rappel à chaque fois que quantum lignes sont lues. L'option -c spécifie le quantum.
Spécifier le nombre de lignes lues entre chaque appel à rappel.
Si -C est spécifié sans -c, le quantum par défaut est 5000. Quand rappel est évalué, l'indice du prochain élément de tableau à affecter et la ligne à affecter à cet élément sont fournis en arguments supplémentaires. rappel est évalué après la lecture de la ligne, mais avant l'affectation de l'élément de tableau.
Si aucune origine explicite n'est fournie, mapfile effacera le tableau avant de lui affecter des valeurs.
mapfile renvoie zéro sauf si une option ou un de ses arguments ne sont pas valables, si le tableau n'est pas valable ou si son affectation est impossible, ou si le tableau n'est pas un tableau indicé.
Enlever des éléments de la pile des répertoires. Les éléments sont numérotés à partir de 0 en commençant par le premier répertoire listé par dirs, ainsi popd est équivalent à “popd +0.” Sans argument, popd supprime le répertoire du sommet de la pile et déplace dans le nouveau répertoire au sommet. Les arguments, si fournis, ont les significations suivantes :
Empêcher le changement normal de répertoire lors de la suppression de répertoires de la pile, manipuler seulement la pile.
+n
Supprimer de la pile le n-ième élément à partir de la gauche de la liste affichée par dirs, en commençant à zéro. Par exemple : “popd +0” enlève le premier répertoire, “popd +1” le second.
Supprimer le n-ième élément à partir de la droite de la liste affichée par dirs, en commençant à zéro. Par exemple : “popd -0” supprime le dernier répertoire et “popd -1” l'avant-dernier.
Si l'élément au sommet de la pile de répertoires est modifié et si l'option n n'est pas fournie, popd utilise la commande interne cd pour changer vers le répertoire au sommet de la pile. Si cd échoue, popd renvoie une valeur différente de zéro.
Autrement, popd renvoie faux si une option non valable est fournie, si la pile de répertoires est vide ou si n indique une entrée de pile de répertoires inexistante.
Si la commande popd réussit, bash effectue un dirs pour afficher le contenu final de la pile de répertoires et le code de retour est 0.
Écrire les arguments mis en forme sur la sortie standard sous le contrôle du format. L'option -v affecte la sortie à la variable var plutôt que de l'afficher sur la sortie standard.
Ce format est une chaîne de caractères contenant trois types d'objets : les caractères normaux, qui sont simplement copiés sur la sortie standard, les caractères de protection qui sont convertis puis copiés sur la sortie standard et les spécifications de format, chacun d'entre eux provoquant l'affichage de l'argument suivant. En plus des caractères cCsSndiouxXeEfFgGaA de format standard de printf(3), printf interprète les indicateurs de format supplémentaires suivants :
%b
conduit printf à développer les séquences de caractères de protection par contre-oblique dans l'argument correspondant de la même manière que echo -e.
%q
fait que printf affiche l'argument correspondant dans un format réutilisable en entrée de l'interpréteur, %q et %Q utilisent le style de protection $'' si des caractères de l'argument l'exigent, et la protection par contre-oblique sinon. Si la chaîne de format utilise l'autre forme de printf, les deux formats protègent l'argument en utilisant des guillemets simples.
%Q
comme %q, mais applique toute précision fournie à l'argument avant de le protéger.
%(formatdate)T
fait que printf affiche la chaîne date-heure résultant de l'utilisation de formatdate en tant que chaîne de format pour strftime(3). L'argument correspondant est un entier représentant le temps en seconde écoulé depuis epoch. L'indicateur de format reconnaît deux valeurs particulières d'argument : -1 représente l'heure actuelle et -2 l'heure à laquelle l'interpréteur a été invoqué. Si aucun argument n’est indiqué, la conversion se comporte comme si -1 avait été fourni. C’est une exception au comportement habituel de printf.
L'ensemble des indicateurs de format %b, %q et %T utilisent les arguments de largeur et de précision de champ à partir de la spécification de format et écrivent autant d'octets que l'argument développé (ou utilisent autant d'espace qu'un champ pour cet argument) qui contient habituellement plus de caractères que l'original.
L'indicateur de format %n accepte un argument correspondant qui est traité comme un nom de variable de l'interpréteur.
Les indicateurs de format %s et %c acceptent un modificateur « l » (long) qui contraignent à convertir la chaîne d'argument en une chaîne de caractères larges et à appliquer la largeur et la précision du champ fournis en terme de caractères, pas d'octets. Les indicateurs de format %S et %C sont équivalents à %ls et %lc, respectivement.
Les arguments des spécificateurs de format qui ne sont pas des chaînes sont traités comme des constantes C, sauf qu'un signe plus ou moins est permis au début, et que, si le premier caractère est un guillemet simple ou double, la valeur est la valeur numérique du caractère suivant en utilisant les paramètres linguistiques régionaux actuels.
Le format est réutilisé si nécessaire pour englober tous les arguments. Si le format demande plus d'arguments que fournis, les spécifications supplémentaires se comportent comme si une valeur zéro ou une chaîne NULL, selon le besoin, avaient été fournies. La valeur renvoyée est zéro en cas de succès, différente de zéro si une option non valable est fournie ou si une erreur d'écriture ou d'affectation se produit.
Ajouter un répertoire au sommet de la pile des répertoires ou effectuer une rotation dans la pile, en ramenant le répertoire actuel au sommet. Sans argument, la commande pushd échange les deux éléments au sommet de la pile des répertoires. Les arguments, si fournis, ont les significations suivantes :
Empêcher le changement normal de répertoire lors d'une rotation ou d'un ajout de répertoires dans la pile, seule la pile est manipulée.
+n
Effectuer une rotation dans la pile de façon à amener au sommet le n-ième répertoire (à partir de la gauche de la liste affichée par dirs, en commençant à de zéro).
Effectuer une rotation dans la pile de façon à amener au sommet le n-ième répertoire (à partir de la droite de la liste affichée par dirs, en commençant à zéro).
Ajouter répertoire au sommet de la pile des répertoires.
Après que la pile a été modifiée, si l'option -n n'a pas été fournie, pushd utilise la commande interne cd pour changer vers le répertoire au sommet de la pile. Si cd échoue, pushd renvoie une valeur différente de zéro.
Autrement, si aucun argument n'est fourni, pushd renvoie zéro sauf si la pile des répertoires est vide. Lors d'une rotation de la pile des répertoires, pushd renvoie zéro sauf si la pile est vide ou si n indique un élément inexistant dans la pile.
Si la commande pushd réussit, bash effectue un dirs pour montrer le contenu final de la pile du répertoire.
Afficher le chemin d'accès absolu du répertoire de travail actuel. Le chemin ne contiendra pas de liens symboliques si l'option -P est fournie, ou si l'option -o physical de la commande interne set est activée. Si l'option -L est utilisée, le chemin affiché peut contenir des liens symboliques. Le code de retour est 0, sauf si une erreur s'est produite lors de la lecture du nom du répertoire actuel ou si une option non valable est fournie.
Lire une ligne depuis l'entrée standard ou à partir du descripteur de fichier df fourni en argument à l'option -u, et la découper en mots comme décrit above dans Découpage en mots, puis affecter le premier mot de cette ligne au premier nom, le second mot au second nom, et ainsi de suite. S'il y a plus de mots que de noms, les mots restants et leurs séparateurs intercalaires sont affectés au dernier nom. S'il y a moins de mots lus dans le flux d'entrée que de noms, des valeurs vides sont affectées aux noms restants. Les caractères contenus dans la valeur de la variable IFS sont utilisés pour découper la ligne en mots en utilisant les mêmes règles que celles utilisées par l'interpréteur pour le développement (décrites above dans Découpage en mots). Le caractère contre-oblique (\) supprime toute signification spéciale pour le caractère suivant lu et est utilisé pour la continuation de ligne.
Les options, si elles sont fournies, ont les significations suivantes :
Les mots sont affectés aux indices successifs de la variable tableau tableau_nom, en commençant à 0. tableau_nom est détruit avant que de nouvelles valeurs ne soient affectées. Les autres arguments nom sont ignorés.
Le premier caractère de délimiteur termine la ligne de saisie, plutôt qu'un changement de ligne. Si délimiteur est une chaîne vide, read termine une ligne quand il lit un caractère NULL.
Si l'entrée standard provient d'un terminal, read utilise readline (consultez READLINE above) pour obtenir la ligne. readline utilise les configurations d'édition en cours (ou par défaut, si l'édition de ligne n'était pas préalablement active), mais utilise le complètement de nom de fichier par défaut de readline.
Si l'entrée standard provient d'un terminal, read utilise readline (consultez READLINE above) pour obtenir la ligne. readline utilise les configurations d'édition en cours (ou par défaut, si l'édition de ligne n'était pas préalablement active), mais utilise le complètement par défaut de bash, y compris le complètement programmable.
Si readline est utilisée pour lire la ligne, read place texte dans le tampon d'édition avant le début de l'édition.
read s'arrête après avoir lu nb_car caractères plutôt que d'attendre une ligne complète en entrée, sauf s'il rencontre une fin de fichier (EOF) ou si read expire, mais un délimiteur est respecté s'il lit moins de nb_car caractères avant le délimiteur.
read s'arrête après avoir lu exactement nb_car caractères plutôt que d'attendre une ligne complète en entrée, sauf s'il rencontre une fin de fichier (EOF) ou si read expire. Les délimiteurs rencontrés en entrée ne sont pas traités spécialement et n'entraînent pas la fin de read avant qu'il lise nb_car caractères. Le résultat n'est pas découpé selon les caractères dans IFS ; le but est que la variable soit affectée exactement des caractères lus (à l'exception du caractère contre-oblique ; consultez ci-dessous l'option -r).
Afficher invite sur la sortie d'erreur standard, sans caractère final de changement de ligne, avant d'essayer de lire toute nouvelle saisie, mais seulement si l'entrée vient d'un terminal.
La contre-oblique n'agit pas comme un caractère de protection. La contre-oblique est considérée comme faisant partie de la ligne. En particulier, une contre-oblique suivie d'un changement de ligne ne peut pas être considérée comme une continuation de ligne.
Mode silencieux. Si une entrée vient d'un terminal, les caractères ne sont pas affichés.
Faire que read expire et renvoie un échec s'il ne lit pas une ligne complète en entrée (ou un nombre indiqué de caractères) dans le délai en secondes. délai est un nombre décimal avec éventuellement des chiffres après la virgule (NdT : point en l'occurrence). Cette option n'est effective que si read lit l'entrée à partir d'un terminal, d'un tube ou depuis un autre fichier spécial ; elle n'a aucun effet lors de la lecture d'un fichier normal. Si read expire, il sauvegarde toute entrée partielle lue dans la variable nom indiquée et le code de retour est supérieur à 128. Si délai est 0, read se termine immédiatement, sans essayer de lire des données. Dans ce cas, le code de retour est 0 si une entrée est disponible pour le descripteur de fichier indiqué, ou la lecture renverra EOF, une valeur différente de zéro sinon.
Lire l'entrée à partir du descripteur de fichier df plutôt que depuis l'entrée standard.
Sauf dans le cas où délimiteur est une chaîne vide, read ignore tout caractère NULL dans l'entrée.
si aucun nom n'est fourni, read affecte la ligne lue, sans autre modification que le retrait du délimiteur de fin, à la variable REPLY.
Le code renvoyé est zéro, sauf si une fin de fichier (EOF) est rencontrée, si read dépasse son délai de réponse (auquel cas le code renvoyé est plus grand que 128), en cas d’erreur d’affectation (comme une affectation de variable à une variable en lecture seule) ou si un descripteur de fichier non valable est fourni en argument de -u.
Les noms indiqués reçoivent un attribut lecture seule ; les valeurs de ces noms ne pourront plus être modifiées par des affectations ultérieures ou supprimées. Si l'option -f est fournie, chaque nom correspond à une fonction de l'interpréteur. L'option -a restreint l'action aux variables de tableaux indicés ; l'option -A restreint l'action aux variables de tableaux associatifs. Si les deux options sont fournies, -A est prioritaire. Si aucun argument nom n'est indiqué ou si l'option -p est fournie, la commande affiche une liste de tous les noms en lecture seule. Les autres options peuvent être utilisées pour restreindre l'affichage à un sous-ensemble de l'ensemble des noms en lecture seule. L'option -p affiche la sortie dans un format susceptible d'être réutilisé en entrée.
readonly permet que la valeur d'une variable soit définie en même temps que l'attribut en lecture seule est modifié en faisant suivre le nom de variable de =valeur. Cela définit la valeur de la variable à valeur tout en modifiant l'attribut en lecture seule.
Le code de retour est 0, sauf si une option non valable est rencontrée, si l'un des noms n'est pas un nom correct de variable de l'interpréteur ou si l'option -f est fournie avec un nom qui n'est pas une fonction.
Arrêter l'exécution d'une fonction de l'interpréteur ou d'un fichier venant de la source et renvoyer la valeur indiquée par n à son contexte d'appel. Si n est omis, le code de retour est celui de la dernière commande exécutée. Si return est exécuté par un gestionnaire de capture, la dernière commande utilisée pour déterminer l'état est la dernière commande exécutée avant le gestionnaire de capture. Si return est exécuté pendant une capture DEBUG, la dernière commande utilisée pour déterminer l'état est la dernière commande exécutée par le gestionnaire de capture avant que return n'ait été invoqué.
Quand return est utilisé pour interrompre l'exécution d'un script exécuté par la commande . (source), cela fait que l'interpréteur arrête l'exécution de ce script et renvoie soit n, soit le code de retour de la dernière commande exécutée au sein du script comme code de retour du script. Si n est fourni, la valeur renvoyée est ses 8 bits de poids faible.
Toute commande associée à la capture de RETURN est exécutée avant la reprise de l'exécution après la fonction ou le script.
La valeur de retour est différente de zéro si return reçoit un argument non numérique, ou si la commande est utilisée hors d'une fonction et non lors de l'exécution d'un script par . ou source.
Sans options, afficher le nom et la valeur de toutes les variables de l'interpréteur dans un format susceptible d'être réutilisé en entrée pour créer ou réinitialiser les variables actuelles. Les variables en lecture seule ne peuvent pas être réinitialisées. En mode POSIX, seules les variables de l'interpréteur sont affichées. La sortie est triée en fonction des paramètres linguistiques régionaux actuels. Lorsque des options sont indiquées, elles créent ou détruisent des attributs de l'interpréteur. Tous les arguments restant après traitement des options sont considérés comme des valeurs pour les paramètres positionnels et sont affectés, dans l'ordre, à : $1, $2, ..., $n. Les options, si indiquées, ont les significations suivantes :
Donner l'attribut export aux variables et fonctions créées ou modifiées et les marquer pour qu'elles soient exportées dans l'environnement des commandes exécutées ultérieurement.
Signaler l'état des tâches terminées en arrière-plan immédiatement, plutôt que d'attendre l'affichage de la prochaine invite de base ou après qu'une commande au premier plan se termine. N'est effectif que si le contrôle des tâches est activé.
Quitter immédiatement si un pipeline (qui peut être réduit à une unique commande simple), une liste ou une commande composée (consultez GRAMMAIRE DE L'INTERPRÉTEUR above), se termine avec un code de retour différent de zéro. L'interpréteur ne termine pas si la commande qui échoue fait partie d'une liste de commandes suivant immédiatement un mot réservé while ou until, d'un test suivant les mots réservés if ou elif, d'une commande exécutée dans une liste && ou || sauf si la commande est située après le dernier && ou ||, d'une commande de pipeline à l'exception de la dernière (sous réserve de l'état de l'option de l'interpréteur pipefail, ou si la valeur renvoyée par la commande est inversée par !. Si une commande composée autre qu'un sous-interpréteur renvoie un code de retour différent de zéro parce qu'une commande échoue alors que -e était ignoré, l'interpréteur ne se termine pas. Une capture de ERR, si existante, est exécutée avant que l'interpréteur ne se termine. Cette option s'applique à l'environnement de l'interpréteur ainsi qu'à l'environnement de chaque sous-interpréteur individuellement (consultez ENVIRONNEMENT D'EXÉCUTION DES COMMANDES above), et peut conduire des sous-interpréteurs à se terminer avant d'y avoir exécuté toutes les commandes.
Si une commande composée ou une fonction de l'interpréteur s’exécutent dans un contexte où -e est ignoré, aucune des commandes exécutées dans une commande composée ou dans un corps de fonction ne sera affectée par le réglage -e, même si -e est défini et qu’une commande renvoie un état d’échec. Si une commande composée ou une fonction de l'interpréteur définissent -e pendant son exécution dans un contexte où -e est ignoré, ce réglage n’aura aucun effet avant la fin de la commande composée ou de la commande contenant l'appel de fonction.
Désactiver le développement des chemins.
Mémoriser l'emplacement des commandes lors de leur exécution. Activée par défaut.
Tous les arguments sous la forme d'affectations sont placés dans l'environnement d'une commande, et non pas seulement ceux qui précèdent le nom de la commande.
Mode supervision. Le contrôle des tâches est activé. Cette option est activée par défaut pour les interpréteurs interactifs sur les systèmes qui le permettent (consultez CONTRÔLE DES TÂCHES above). Tous les processus sont exécutés dans un groupe de processus séparé. Quand une tâche en arrière-plan se termine, l'interpréteur affiche une ligne contenant son code de retour.
Lecture de commandes sans exécution. Cela peut être utilisé pour rechercher les erreurs de syntaxe dans un script. Cette option est ignorée par les interpréteurs interactifs.
Le nom_d_option est l'un des suivants :
Identique à -a.
Identique à -B.
Utiliser une interface d'édition des lignes de commande « à la Emacs ». C'est le comportement activé par défaut quand l'interpréteur est interactif, sauf si l'interpréteur est démarré avec l'option --noediting. L'interface d'édition utilisée par read -e est modifiée également.
Identique à -e.
Identique à -E.
Identique à -T.
Identique à -h.
Identique à -H.
Activer l'historique des commandes, comme décrit above dans HISTORIQUE. Cette option est activée par défaut dans les interpréteurs interactifs.
Identique à l'exécution de la commande d'interpréteur “IGNOREEOF=10” a été exécutée (consultez Variables de l'interpréteur above).
Identique à -k.
Identique à -m.
Identique à -C.
Identique à -n.
Identique à -f.
Actuellement ignorée.
Identique à -b.
Identique à -u.
Identique à -t.
Identique à -P.
Si configurée, la valeur renvoyée par un pipeline est la valeur de la dernière commande (la plus à droite) à terminer avec un code de retour différent de zéro ou zéro si toutes les commandes du pipeline terminent avec succès. Désactivée par défaut.
Activer le mode POSIX ; modifier le comportement de bash quand le fonctionnement par défaut diffère de la norme POSIX pour correspondre à la norme. Consultez la section VOIR AUSSI below pour une référence à un document précisant la façon dont le mode POSIX affecte le comportement de bash.
Identique à -p.
Identique à -v.
Utiliser une interface d'édition des lignes de commande « à la vi ». L'interface d'édition utilisée par read -e est modifiée également.
Identique à -x.

Si -o est fournie sans nom_d_option, set affiche la configuration actuelle des options de l'interpréteur. Si +o est fournie sans nom_d_option, set affiche une série de commandes set pour recréer la configuration actuelle d'options sur la sortie standard.

Basculer en mode privilégié. Dans ce mode, l'interpréteur ne lit pas les fichiers $ENV et $BASH_ENV, les fonctions de l'interpréteur ne sont pas héritées de l'environnement, et les variables SHELLOPTS, BASHOPTS, CDPATH et GLOBIGNORE, si présentes dans l'environnement, sont ignorées. Si l'interpréteur démarre avec un UID (ou respectivement un GID) effectif différent de son UID (GID) réel et si l'option -p n'est pas fournie, ce comportement est appliqué et l'UID (GID) effectif est positionné à l'UID (GID) réel. Si l'option -p est fournie au démarrage, l'UID (GID) effectif n'est pas modifié. Désactiver cette option conduit à la configuration des UID et GID effectifs à la valeur des UID et GID réels.
Activer le mode interpréteur restreint. Cette option ne peut pas être annulée une fois qu'elle a été définie.
Terminer après lecture et exécution d'une commande.
Considérer les variables inexistantes et les paramètres différents des paramètres spéciaux “@” et “*”, ou les variables tableau indicées par “@” ou “*”, comme des erreurs lors du développement des paramètres. Si un développement de variable inexistante ou de paramètre est tenté, l'interpréteur affiche un message d'erreur et, s'il n'est pas interactif, termine avec un code de retour différent de zéro.
Afficher les lignes en entrée de l'interpréteur lorsqu'elles sont lues.
Après le développement de chaque commande simple, commande for, commande case, commande select ou commande arithmétique for, afficher la valeur développée de PS4, suivie de la commande et ses arguments développés ou la liste de mots associés, sur la sortie d'erreur standard.
L'interpréteur effectue le développement des accolades (consultez Développement des accolades above). Activée par défaut.
Si définie, bash n'écrasera pas un fichier existant avec les opérateurs de redirection >, >& et <>. L'utilisation de l'opérateur de redirection >| à la place de > outrepassera ce comportement et forcera la création d'un fichier de sortie.
Si configurée, toute capture de ERR est héritée par les fonctions d'interpréteur, les substitutions de commandes et les commandes exécutées dans un sous-interpréteur. La capture de ERR n'est normalement pas héritée dans de tels cas.
Activer le style ! de substitution d'historique. C'est le comportement par défaut lorsque l'interpréteur est interactif.
Si configurée, l'interpréteur ne résout pas les liens symboliques lors de l'exécution de commandes comme cd qui modifient le répertoire de travail. Il utilise à la place la structure de répertoires physique. Par défaut bash suit la chaîne logique des répertoires lors des commandes qui modifient le répertoire actuel.
Si définie, toutes les captures de DEBUG et RETURN sont héritées par les fonctions de l'interpréteur, les substitutions de commande et les commandes exécutées dans un sous-interpréteur. Les captures de DEBUG et RETURN ne sont normalement pas héritées dans de tels cas.
--
Si aucun argument ne suit cette option, détruire les paramètres positionnels. Sinon, configurer les paramètres positionnels aux arguments, même si certains d'entre eux commencent par un -.
-
Marquer la fin des options et affecter tous les arguments restants aux paramètres positionnels. Les options -x et -v sont désactivées. S'il n'y a pas d'arguments, les paramètres positionnels ne sont pas modifiés.

Par défaut les attributs sont désactivés, sauf indication contraire. En utilisant « + » à la place de « - », les options sont désactivées. Les options peuvent également être fournies en argument lors de l'appel de l'interpréteur. Le jeu actuel des options peut être trouvé dans $-. Le code de retour est toujours zéro, sauf si une option non valable est rencontrée.

Renommer les paramètres positionnels à partir de n+1 ... en $1 .... Les paramètres représentés par les nombres $# jusqu'à $#-n+1 sont détruits. n doit être un entier non négatif inférieur ou égal à $#. Si n vaut 0, aucun paramètre n'est modifié. Si n est omis, on suppose qu'il vaut 1. Si n est supérieur à $#, les paramètres positionnels ne sont pas modifiés. Le code de retour est supérieur à zéro si n est supérieur à $# ou strictement négatif, sinon 0 est renvoyé.
Basculer la valeur des réglages contrôlant le comportement de gestion des options de l'interpréteur. Les réglages peuvent soit être ceux ci-dessous, soit, si l'option -o est utilisée, ceux disponibles avec l'option -o de la commande interne set.
Sans option ou avec l'option -p, afficher une liste de toutes les options configurables, avec l'indication de l'état de chacune d'entre elles ; si des noms_opt sont fournis, la sortie est limitée à ces options. L'option -p affiche la sortie sous une forme susceptible d'être réutilisée en entrée.
Les autres options ont les significations suivantes :
Activer (créer) chaque nom_opt.
Désactiver (détruire) chaque nom_opt.
Supprimer la sortie normale (mode silencieux) ; le code de retour indique si nom_opt est existante ou non. Si plusieurs arguments nom_opt sont indiqués avec -q, le code de retour est zéro si tous les noms_opt sont activés ; différent de zéro sinon.
Restreindre les valeurs de nom_opt à celles définies pour l'option -o de la commande interne set.

Si les options -s ou -u sont utilisées sans argument nom_opt, shopt affiche respectivement les options existantes ou non existantes. Sauf indication contraire, les options shopt sont désactivées (détruites) par défaut.

Le code de retour lors d'un affichage des options est zéro si tous les noms_opt sont activés, différent de zéro sinon. Lors de la création ou de la destruction d'options, le code de retour est zéro, à moins que nom_opt ne soit pas une option valable d'interpréteur.

La liste des options shopt est :

Si définie, l'interpréteur supprime les évaluations multiples des indices de tableaux associatifs et indecés pendant l'évaluation d'expressions arithmétiques lors de l'exécution de commandes internes qui peuvent affecter des variables et lors de l'exécution de commandes internes qui réalisent un déréférencement de tableau.
Obsolète ; synonyme de array_expand_once.
Si définie, un nom de commande, qui est le nom d'un répertoire est exécuté comme s'il était l'argument de la commande interne cd. Cette option n'est utilisée que par les interpréteurs interactifs.
Si définie, les noms de fichier ajoutés à la variable tableau BASH_SOURCE sont convertis en noms de chemin complets (voir Variable de l'interpréteur ci-dessus).
Si définie, un argument de la commande interne cd qui n'est pas un répertoire est supposé être un nom de variable dont la valeur est le répertoire visé.
Si définie, la commande cd tente de corriger les erreurs minimes de frappe dans un composant du répertoire. Les erreurs mineures comprennent les inversions d'un caractère, un caractère manquant et un caractère en trop. Si cd corrige le nom du répertoire, il affiche le nom de fichier corrigé et la commande est exécutée. Cette option n'est utilisée que par les interpréteurs interactifs.
Si définie, bash vérifie si une commande trouvée dans la table de hachage existe avant d'essayer de l'exécuter. Si une commande hachée n'existe plus, bash effectue une recherche normale de chemin.
Si définie, bash affiche la liste des états de toutes les tâches en cours et arrêtées avant de terminer un interpréteur interactif. Si des tâches sont en cours, bash diffère sa fin jusqu'à ce qu'une nouvelle sortie soit tentée sans commande intermédiaire (consultez CONTRÔLE DES TÂCHES above). L'interpréteur repousse toujours sa fin si des tâches sont arrêtées.
Si définie, bash vérifie la taille de la fenêtre après chaque commande externe et, au besoin, met à jour les valeurs des variables LINES et COLUMNS, en utilisant le descripteur de fichier associé à la sortie d'erreur standard si c'est un terminal. Cette option est activée par défaut.
Si définie, bash essaie de sauvegarder les commandes s'étendant sur plusieurs lignes en un seul élément d'historique. Cela facilite l'édition ultérieure de commandes multilignes. Cette option est activée par défaut, mais n'a un effet que si l'historique des commandes est activé, comme décrit above dans HISTORIQUE.
Ces directives contrôlent les aspects du mode de compatibilité de l'interpréteur (consultez MODE DE COMPATIBILITÉ DE L'INTERPRÉTEUR below).
Si définie, bash protège tous les métacaractères de l'interpréteur dans les noms de fichier et de répertoire lors du complètement. Si non définie, bash supprime les métacaractères comme les signes dollar du jeu de caractères qui sera protégé dans les noms de fichier complétés quand cesmétacaractères apparaissent dans des références de variable d’interpréteur dans des mots à compléter. Cela signifie que les signes dollar dans les noms de variable qui se développent en répertoires ne seront pas protégés ; cependant, tous les signes dollar apparaissant dans les noms de fichier ne seront pas protégés non plus. Ce n’est actif que si bash utilise des contre-obliques pour protéger des noms de fichier complétés. Cette variable est définie par défaut, ce qui est le comportement de bash par défaut jusqu’à la version 4.2.
Si définie, bash remplace les noms de répertoire par les résultats de développement de mots lors du complètement des noms de fichier. Cela modifie le contenu du tampon d'édition de readline. Sinon, bash essaye de conserver ce que l'utilisateur a saisi.
Si définie, bash essaie de corriger les erreurs de frappe sur les noms de répertoire lors du complètement de mot si le nom de répertoire initialement fourni n'existe pas.
Si définie, bash inclut les noms de fichier commençant par un “.” dans le résultat des développements de chemin. Les noms de fichier . et .. doivent toujours être mis en correspondance explicitement, même si dotglob est défini.
Si définie, un interpréteur non interactif ne se terminera pas s'il ne peut exécuter un fichier indiqué en argument de la commande interne exec. Un interpréteur interactif ne se termine pas si exec échoue.
Si définie, les alias sont développés comme décrit above dans ALIAS. Cette option est activée par défaut pour les interpréteurs interactifs.
Si définie à l'appel de l'interpréteur de commandes ou dans un fichier de lancement de l'interpréteur, prend les dispositions pour que le paramétrage du traçage soit exécuté avant que l'interpréteur démarre, de manière identique à l'option --debugger. Si elle est posée après l'appel, le comportement prévu pour l'utilisation du traçage est activé :
1.
L'option -F de la commande interne declare affiche le nom du fichier source et le numéro de ligne correspondant à chaque nom de fonction fourni comme argument.
2.
Si la commande lancée par la capture de DEBUG renvoie une valeur différente de zéro, la commande suivante est sautée et n'est pas exécutée.
3.
Si la commande lancée par la capture de DEBUG renvoie la valeur 2 et si l'interpréteur s'exécute dans un sous-programme (une fonction de l'interpréteur ou un script exécuté par les commandes internes . ou source), l'interpréteur simule un appel à return.
4.
BASH_ARGC et BASH_ARGV sont mises à jour comme expliqué dans leurs descriptions above).
5.
Le traçage des fonctions est activé : la substitution de commande, les fonctions de l'interpréteur et les sous-interpréteurs appelés avec ( commande ) héritent des captures de DEBUG et RETURN.
6.
Le traçage d'erreur est activé : la substitution de commande, les fonctions de l'interpréteur et les sous-interpréteurs appelés avec ( commande ) héritent de la capture de ERR.
Si définie, activer les fonctionnalités étendues de mise en correspondance décrites above dans Développement des chemins.
Si définie, la protection par $'chaîne' et $"chaîne" est effectuée à l'intérieur des développements de ${paramètres} entre guillemets doubles. Cette option est activée par défaut.
Si définie, les motifs qui échouent à faire correspondre les noms de fichier pendant le développement des chemins provoquent une erreur de développement.
Si définie, les suffixes indiqués par la variable de l'interpréteur FIGNORE conduiront des mots à être ignorés lors du complètement de mot, même si les mots ignorés sont les seuls complètements possibles. Consultez Variables de l'interpréteur above pour une description de FIGNORE. Cette option est activée par défaut.
Si définie, les expressions d’intervalle utilisées dans les motifs de correspondance des expressions entre crochets (consultez Motifs génériques above) se comportent comme avec les paramètres régionaux traditionnels de C lors des comparaisons. Cela signifie que la correspondance de motif ne prend pas en compte l'ordre de collation des paramètres régionaux actuels, donc b ne sera pas ordonné entre A et B, et les caractères ASCII en capitale et minuscule seront fusionnés.
Si définie, le développement des chemins ne sera jamais mis en correspondance avec les noms de fichier . et .., même si le motif débute par un “.”. Cette option est activée par défaut.
Si définie, le motif ** utilisé dans un contexte de développement des chemins correspondra à tous les fichiers et zéro ou plusieurs répertoires et sous-répertoires. Si le motif est suivi de /, seuls les répertoires et sous-répertoires correspondent.
Si définie, les messages d'erreur de l'interpréteur seront écrits dans le format standard GNU des messages d'erreur.
Si définie, la file d'historique est ajoutée au fichier désigné par la valeur de la variable HISTFILE lorsque l'interpréteur termine, plutôt que d'écraser ce fichier.
Si définie et si readline est utilisée, l'utilisateur peut rééditer une substitution d'historique qui a échoué.
Si définie et si readline est utilisée, le résultat de la substitution d'historique n'est pas transmise immédiatement à l'analyseur de l'interpréteur. À la place, la ligne résultante est chargée dans le tampon d'édition de readline, permettant des modifications ultérieures.
Si définie et si readline est utilisée, bash essayera d'effectuer le complètement des noms de machines lorsqu'un mot contient un @ (consultez Complètement dans READLINE above). Cette option est activée par défaut.
Si définie, bash enverra un signal SIGHUP à toutes les tâches lorsqu'un interpréteur de connexion interactif termine.
Si définie, la substitution de commande hérite de la valeur de l'option errexit, au lieu de la détruire dans l'environnement du sous-interpréteur. Cette option est activée quand le mode POSIX est activé.
Dans un interpréteur interactif, un mot commençant par un # fait que ce mot et tous les autres caractères restants de la ligne sont ignorés comme dans un interpréteur non interactif (consultez COMMENTAIRES above). Cette option est activée par défaut.
Si définie, et que le contrôle des tâches n'est pas activé, l'interpréteur exécute la dernière commande d'un pipeline non exécutée en arrière-plan dans l'environnement d'interpréteur actuel.
Si définie et si l'option cmdhist est activée, les commandes multilignes sont sauvegardées dans l'historique avec des changements de ligne incorporés comme séparateurs plutôt que des points-virgules là où cela est possible.
Si définie, les variables locales héritent de la valeur et des attributs d'une variable de même nom qui existe avec une portée antérieure avant qu'une nouvelle valeur soit assignée. L'attribut nameref n'est pas hérité.
Si définie, l'appel de unset sur des variables locales dans des portées de fonction antérieures les marque de manière que des recherches ultérieures les trouvent désactivées jusqu'à ce que la fonction rende la main. Ce comportement est le même que de détruire les variables locales avec la portée de la fonction actuelle.
L'interpréteur crée cette option s'il est démarré en tant qu'interpréteur de connexion (consultez APPEL above). La valeur ne peut pas être modifiée.
Si définie et s'il a été accédé à un fichier que bash surveille pour les courriers depuis sa dernière vérification, bash affiche le message “The mail in mailfile has been read”.
Si définie et si readline est utilisée, bash ne recherche pas dans PATH de possibles complètements quand le complètement est tenté sur une ligne vide.
Si définie, bash fait correspondre les noms de fichier d'une façon insensible à la casse lors du développement des chemins (consultez Développement des chemins above).
Si définie, bash fait correspondre les motifs d'une façon insensible à la casse lors de la mise en correspondance pendant l'exécution des commandes conditionnelles case ou [[, lorsqu'il procède à des développements de motif de substitution de mot ou qu'il filtre des complètements possibles dans le cadre d'un complètement programmable.
Si définie, bash entoure les résultats de la traduction de la protection de $"..." par des guillemets simples au lieu de guillemets doubles. Si la chaîne n'est pas traduite, cela n'a aucun effet.
Si définie, les motifs de développement des chemins ne correspondant à aucun fichier (consultez Développement des chemins above) se développent en rien et sont supprimés, plutôt que de se développer en leur valeur littérale.
Si définie, bash développe les occurrences de & dans la chaîne de remplacement de la substitution de motif à la valeur du texte mis en correspondance par le motif, comme décrit dans Développement des paramètres above. Cette option est activée par défaut.
Si définie, activer les outils de complètement programmable (consultez Complètement programmable above). Cette option est activée par défaut.
Si définie et si le complètement programmable est activé, bash traite un nom de commande qui n'a pas de complètement comme un possible alias et tente un développement d'alias. S'il possède un alias, bash tente un complètement programmable en utilisant le nom de commande résultant du développement d'alias.
Si définie, les chaînes d'invite sont sujettes au développement des paramètres, à la substitution de commande, au développement arithmétique et à la suppression des protections après avoir été développées comme décrit dans INVITES above. Cette option est activée par défaut.
L'interpréteur définit cette option s'il démarre en mode restreint (consultez INTERPRÉTEUR RESTREINT below). Cette valeur ne peut pas être modifiée. Elle n'est pas réinitialisée lorsque les fichiers d’initialisation sont exécutés, ce qui permet à ces fichiers de découvrir si un interpréteur est restreint ou non.
Si définie, la commande interne shift affiche un message d'erreur lorsque le nombre de décalages dépasse le nombre de paramètres positionnels.
Si définie, la commande interne . (source) utilise la valeur de la variable PATH pour trouver le répertoire contenant le fichier fourni en argument quand l'option -p n'est pas fournie. Cette option est activée par défaut.
Si définie, l'interpréteur ferme automatiquement les descripteurs de fichier affectés en utilisant la syntaxe de redirection {nom_de_variable} (consultez REDIRECTION above) au lieu de les laisser ouverts quand la commande se termine.
Si définie, la commande interne echo développe par défaut les séquences de caractères de protection par contre-oblique. Si l'option d'interpréteur posix est aussi activée, echo n'interprète aucune option.
Suspendre l'exécution de l'interpréteur jusqu'à la réception d'un signal SIGCONT. Un interpréteur de connexion, ou un interpréteur dont le contrôle des tâches n'est pas activé, ne peut pas être suspendu ; l'option -f outrepasse ce comportement et force sa suspension. Le code de retour est 0, sauf si l'interpréteur est un interpréteur de connexion, ou si le contrôle des tâches n'est pas activé et que l'option -f est absente.
[ expr ]
Renvoyer un état 0 (vrai) ou 1 (faux) selon l'évaluation de l'expression conditionnelle expr. Chaque opérateur et opérande doit être représenté par un argument distinct. Les expressions sont composées des primitives décrites above dans EXPRESSIONS CONDITIONNELLES. test n'accepte aucune option, et n'accepte pas non plus et ignore un argument de -- pour signifier la fin des options.
Les conditions peuvent être combinées avec les opérateurs suivants, décrits par ordre de priorité décroissante. L'évaluation dépend du nombre d'arguments, voir ci-dessous. test utilise la priorité des opérateurs quand il y a au moins cinq arguments.
! expr
Vrai si expr est fausse.
( expr )
Renvoie la valeur de expr. Peut servir à outrepasser la priorité normale des opérateurs.
Vrai si expr1 et expr2 sont toutes deux vraies.
Vrai si expr1 ou expr2 est vraie.

test et [ évaluent les expressions conditionnelles en fonction d'un jeu de règles dépendant du nombre d'arguments.

0 argument
La condition est fausse.
1 argument
La condition est vraie si et seulement si l'argument n'est pas NULL.
2 arguments
Si le premier argument est !, la condition est vraie si et seulement si le second argument est NULL. Si le premier argument est l'un des opérateurs conditionnels unaires décrits above dans EXPRESSIONS CONDITIONNELLES la condition est vraie si le test unaire est vrai. Si le premier argument n'est pas un opérateur conditionnel unaire valable, la condition est fausse.
3 arguments
Les conditions suivantes sont appliquées dans l'ordre de la liste. Si le second argument est l'un des opérateurs conditionnels binaires décrits above dans EXPRESSIONS CONDITIONNELLES, le résultat de la condition est le résultat du test binaire utilisant le premier et le troisième argument en tant qu'opérandes. Les opérateurs -a et -o sont considérés comme des opérateurs binaires quand il y a trois arguments. Si le premier argument est !, la valeur est la négation du test binaire utilisant les deuxième et troisième arguments. Si le premier argument est exactement ( et le troisième argument est exactement ), le résultat est le test unaire du second argument. Sinon la condition est fausse.
4 arguments
Les conditions suivantes sont appliquées dans l'ordre de la liste. Si le premier argument est !, le résultat est la négation de l'expression ternaire composée des arguments restants. Si le premier argument est exactement ( et le quatrième argument est exactement ), le résultat est le test binaire des deuxième et troisième arguments. Sinon la condition est analysée et évaluée selon la priorité en utilisant les règles listées ci-dessus.
5 arguments ou plus
La condition est analysée et évaluée selon les règles de priorité décrites ci-dessus.

Lorsque l'interpréteur est en mode posix, ou si l'expression fait partie de la commande [[, les opérateurs < et > trient en utilisant les paramètres linguistiques régionaux actuels. Si l'interpréteur n'est pas en mode posix, les commandes test et [ trient de façon lexicographique en utilisant l'ordre ASCII.

L'analyse historique de la priorité des opérateurs avec quatre arguments ou plus peut mener à des ambiguïtés quand elle rencontre des chaînes qui ressemblent à des primitives. La norme POSIX considère comme obsolètes les primitives -a et -o et les expressions entourées de parenthèses. Les scripts ne doivent plus les utiliser. Il est beaucoup plus fiable de restreindre les invocations de tests à une primitive unique et de remplacer les utilisations de -a et -o par les opérateurs de liste && et || de l'interpréteur.

Afficher les durées cumulées utilisateur et système pour l'interpréteur et les processus lancés par cet interpréteur. Le code de retour est 0.
L'action est une commande qui est lue et exécutée quand l'interpréteur reçoit un des signaux signal. Si l'action est absente (et qu'il y a un seul signal) ou -, chaque signal indiqué est remis à la valeur qu'il avait au démarrage de l'interpréteur. Si action est une chaîne NULL, le signal indiqué par chaque signal est ignoré par l'interpréteur et les commandes qu'il invoque.
Si aucun argument n'est fourni, trap affiche les actions associées avec chaque signal capturé comme un ensemble de commandes trap qui peuvent être réutilisées comme entrée de l'interpréteur pour restaurer les dispositions actuelles des signaux. Si -p est fourni, et si action n'est pas présente, trap affiche les actions associées à chaque signal ou, si aucune n'est fournie, pour tous les signaux capturés, comme un ensemble de commandes trap qui peuvent être réutilisées comme entrée de l'interpréteur pour restaurer les dispositions actuelles des signaux. L'option -P se comporte de la même manière, mais n'affiche que les actions associées à chaque argument de signal. -P requiert au moins un argument signal. Les options -P ou -p peuvent être utilisées dans un environnement de sous-interpréteur (par exemple, une substitution de commande) et, pourvu qu'elles soient utilisées avant que trap soit utilisé pour changer la gestion d'un signal, afficheront l'état des captures de son parent.
L'option -l affiche une liste de noms de signal et les numéros correspondants. Chaque signal est soit un nom de signal défini dans <signal.h>, ou un numéro de signal. Les noms de signal sont insensibles à la casse et le préfixe SIG est facultatif. Si -l est fournie sans argument signal, l'option affiche une liste de noms de signal valables.
Si un signal est EXIT (0), action est exécutée lors de la sortie de l'interpréteur. Si un signal est DEBUG, la commande action est exécutée avant toute commande simple, commande for, commande case, commande select, commande arithmétique ((, commande conditionnelle [[, commande arithmétique for, et avant que la première commande ne s'exécute dans une fonction de l'interpréteur (consultez GRAMMAIRE DE L'INTERPRÉTEUR above). Reportez-vous à la description de l'option de l'interpréteur extdebug (voir shopt above) pour des détails sur ses effets sur la capture de DEBUG. Si un signal est RETURN, la commande action est exécutée à chaque fois qu'une fonction de l'interpréteur ou un script exécuté avec les commandes internes . ou source termine son exécution.
Si un signal est ERR, action est exécutée chaque fois qu'un pipeline (qui peut être réduit à une unique commande simple), une liste ou une commande composée, renvoie un code de retour différent de zéro, soumis aux conditions suivantes. La capture de ERR n'est pas exécutée si la commande échouant fait partie d'une liste de commandes suivant immédiatement un mot réservé while ou until, d'un test dans une construction if, d'une commande exécutée au sein d'une liste de && ou de || exceptée la commande suivant le dernier && ou ||, n’importe quelle commande d’un pipeline sauf la dernière (selon l'état de l'option d'interpréteur pipefail), ou si la valeur renvoyée par la commande est inversée par !. Ce sont les mêmes conditions que celles observées par l'option errexit (-e).
Quand l'interpréteur n'est pas interactif, les signaux ignorés en entrant dans l'interpréteur ne peuvent pas être capturés ou réinitialisés. Les interpréteurs interactifs permettent de capturer des signaux ignorés à l'entrée. Les signaux capturés qui ne sont pas ignorés sont réinitialisés à leur valeur d'origine dans un sous-interpréteur ou un environnement de sous-interpréteur quand il est créé. Le code de retour est faux si un signal n'est pas valable, sinon trap renvoie vrai.
Ne fait rien, renvoie le code 0.
Indiquer la façon d’interpréter chaque nom s’il est utilisé comme nom de commande.
Si l'option -t est utilisé, type affiche une des chaînes alias, keyword, function, builtin ou file selon que le nom est un alias, un mot clé réservé de l'interpréteur, une fonction, une commande interne ou un fichier exécutable, respectivement. Si le nom n'est pas trouvé, type n'affiche rien et renvoie un code de retour différent de zéro.
Si l'option -p est utilisée, type renvoie le chemin du fichier exécutable qui pourra être trouvé en recherchant nom dans $PATH ou rien si “type -t name” ne renvoyait pas file. L'option -P force une recherche dans PATH pour chaque nom, même si “type -t name” ne renvoyait pas file. Si nom est présent dans la table de hachage des commandes, -p et -P affichent la valeur hachée qui n'est pas nécessairement le fichier apparaissant en premier dans PATH.
Si l'option -a est utilisée, type affiche tous les emplacements contenant une commande nommée nom. Cela inclut les alias et les mots réservés, les fonctions et les commandes internes, mais les options de recherche de chemin (-p et -P) peuvent être fournies pour restreindre la sortie aux fichiers exécutables, type ne consulte pas la table des commandes hachée lors de l'utilisation de -a avec -p, et effectue seulement une recherche de nom dans PATH.
L'option -f supprime la recherche de fonctions de l'interpréteur comme avec la commande interne command. type renvoie vrai si tous les arguments sont trouvés et faux si certains n'ont pas été trouvés.
Fournir, sur les systèmes qui le permettent, un mécanisme de contrôle des ressources disponibles pour l'interpréteur et pour les processus qu'il lance.
Les options -H et -S indiquent si la limitation est stricte (« hard ») ou flexible (« soft ») pour la ressource indiquée. Une limitation stricte ne peut pas être augmentée par un utilisateur non privilégié une fois qu'elle a été configurée ; une limitation flexible peut être augmentée jusqu'à la valeur de la limitation stricte correspondante. Si ni -H ni -S ne sont indiqués, ulimit définit à la fois les limitations flexibles et strictes.
La valeur de la limitation peut être un nombre (utilisant les unités particulières de la ressource) ou l'une des valeurs spéciales hard, soft ou unlimited, qui signifient, respectivement, la limitation stricte actuelle, la limitation flexible actuelle et l'absence de limitation. Si la limitation est omise, ulimit affiche la valeur actuelle de la limitation flexible pour la ressource, à moins que l'option -H soit indiquée. Quand plusieurs ressources sont indiquées, les noms des limitations et leurs unités, le cas échéant, sont affichés avant les valeurs. Les autres options sont interprétées comme suit :
Toutes les limitations actuelles sont signalées ; aucune limitation n'est fixée.
La taille maximale de tampon de socket.
La taille maximale des fichiers core créés.
La taille maximale du segment de données d'un processus.
La priorité maximale d’ordonnancement ( “nice”).
La taille maximale d'un fichier écrit par l'interpréteur et ses enfants.
Le nombre maximal de signaux en attente.
Le nombre maximal de kqueue qui peuvent être allouées.
La taille maximale qui peut être verrouillée en mémoire.
La taille maximale de la partie résidente d'un processus (« resident set size » ou RSS, la plupart des systèmes ne respectent pas cette limite).
Le nombre maximal de descripteurs de fichier ouverts (la plupart des systèmes ne permettent pas de modifier cette valeur).
La taille d'un tube en blocs de 512 octets (parfois non définie).
Le nombre maximal d'octets dans les files de messages POSIX.
La priorité maximale d'ordonnancement temps-réel.
La taille maximale de la pile.
La durée maximale, en secondes, de temps processeur accordé à un processus.
Le nombre maximal de processus autorisés pour un seul utilisateur.
La quantité maximale de mémoire virtuelle disponible pour l'interpréteur et, sur certains systèmes, pour ses enfants.
Le nombre maximal de verrous de fichier.
Le nombre maximal de pseudo-terminaux.
La durée maximale pendant laquelle un processus en temps réel peut s'exécuter avant de bloquer, en microsecondes.
Le nombre maximal de processus légers (« threads »).

Si une limitation est indiquée, et que l'option -a n’est pas donnée, limitation est la nouvelle valeur pour la ressource indiquée. Si aucune option n'est indiquée alors -f est supposée.

Les valeurs s'expriment par pas de 1024 octets, sauf pour -t qui est en secondes, -R qui est en microsecondes, -p qui utilise comme unité le bloc de 512 octets et pour -P, -T, -b, -k, -n et -u qui n'ont pas d'unité ; enfin, en mode POSIX, la valeur pour -c et -f s'exprime par pas de 512 octets. Le code de retour est 0, sauf si une option ou un argument non valables ont été fournis ou si une erreur se produit en configurant une nouvelle limitation.

Configurer le masque de création de fichier de l'utilisateur à mode. Si mode commence par un chiffre, il est interprété comme un nombre octal, sinon il est considéré comme un masque symbolique, semblable à ceux acceptés par chmod(1). Si mode est omis, umask affiche la valeur actuelle du masque. L'option -S sans argument mode affiche le masque sous forme symbolique ; la sortie par défaut est un nombre octal. Si l'option -p est fournie et si mode est omis, la sortie est sous une forme réutilisable en entrée. Le code de retour est zéro si le mode a été changé correctement ou si aucun argument mode n'a été fourni, et différent de zéro sinon.
Supprimer le nom de la liste des alias définis. Si l'option -a est fournie, supprimer toutes les définitions d'alias. La valeur renvoyée est vrai, sauf si un nom fourni n'est pas un alias défini.
Pour chaque nom indiqué, supprimer la variable ou la fonction correspondante. Si l'option -v est indiquée, chaque nom se rapporte à une variable de l'interpréteur, et cette variable est supprimée. Si l'option -f est indiquée, chaque nom se rapporte à une fonction de l'interpréteur et la définition de la fonction est supprimée. Si l'option -n est fournie, et que nom est une variable avec l'attribut nameref, nom sera détruit plutôt que la variable qu'il référence. -n n’a pas d’effet si l'option -f est fournie. Les variables et les fonctions en lecture seule ne peuvent pas être détruites. Quand des variables ou des fonctions sont supprimées, elles sont aussi supprimées de l'environnement passé aux commandes suivantes. Si aucune option n’est fournie, chaque nom fait référence à une variable ; si aucune variable de ce nom n’existe, la fonction de ce nom, si elle existe est détruite. Certaines variables de l'interpréteur ne peuvent pas être détruites. Si l'une des variables BASH_ALIASES, BASH_ARGV0, BASH_CMDS, BASH_COMMAND, BASH_SUBSHELL, BASHPID, COMP_WORDBREAKS, DIRSTACK, EPOCHREALTIME, EPOCHSECONDS, FUNCNAME, GROUPS, HISTCMD, LINENO, RANDOM, SECONDS ou SRANDOM est détruite, elle perd ses propriétés particulières, même si elle est recréée ultérieurement. Le code de retour est vrai sauf si un nom est en lecture seule ou ne peut pas être détruit.
Attendre que tous les processus enfants indiqués par id s’exécutent et renvoyer le code de retour du dernier id. Chaque id peut être un identificateur de processus pid ou une tâche ; si une spécification de tâche est indiquée, wait attend la fin de tous les processus de la tâche.
Si aucune option ou id ne sont fournis, wait attend la fin de toutes exécutées en arrière-plan et l'exécution de la dernière substitution de processus, si son identifiant de processus est le même que $! et le code de retour est zéro.
Si l'option -n est fournie, wait attend la fin de tout id donné ou, si aucun id n'est fourni, de toute substitution de tâche ou de processus, et renvoie son code de retour. Si aucun des id n'est un enfant de l'interpréteur, ou si aucun id n'est fourni et que l'interpréteur n'a pas d'enfants à attendre, le code de retour est 127.
Si l'option -p est fournie, wait assigne l'identificateur de processus ou de tâche à la variable nom_de_variable indiquée par l'argument de l'option pour laquelle le code de retour est renvoyé. La variable, qui ne peut pas être en lecture seule, sera tout d'abord détruite avant toute affectation. Ce n'est utile que lorsque l'option -n est fournie.
Fournir l'option -f, quand le contrôle des tâches est activé, force wait à attendre que chaque id se termine avant de renvoyer son état, plutôt que de renvoyer son état quand il change.
Si aucune des id ne spécifie un des processus enfant actifs de l'interpréteur, le code de retour est 127. Si wait est interrompu par un signal, les nom_de_variable demeureront non définis et le code de retour sera supérieur à 128 comme décrit dans SIGNAUX above. Sinon, la code de retour est le code de retour du dernier id.

MODE DE COMPATIBILITÉ DE L'INTERPRÉTEUR

Bash-4.0 a introduit le concept de niveau de compatibilité de l'interpréteur spécifié comme un ensemble d'options de la commande interne shopt (compat31, compat32, compat40, compat41, etc.). Il ne peut y avoir qu'un seul niveau de compatibilité en cours – les options s'excluent mutuellement. Le niveau de compatibilité est destiné à permettre aux utilisateurs de choisir un comportement d'une version antérieure qui est incompatible avec les versions plus récentes lors des migrations de scripts pour utiliser les fonctionnalités et les comportements actuels. C'est censé être une solution temporaire.

Cette section ne mentionne pas les comportements standards d'une version particulière (par exemple, la configuration à compat32 signifie que la protection de la partie droite de l'opérateur de correspondance d'une expression rationnelle protège les caractères spéciaux d'expression rationnelle dans le mot, ce qui est le comportement par défaut dans bash-3.2 et les versions suivantes).

Si l'utilisateur active, par exemple, compat32, cela peut affecter le comportement des autres niveaux de compatibilité jusqu'au, et y compris, niveau de compatibilité en cours. L'idée est que chaque niveau de compatibilité contrôle les comportements qui ont changé dans cette version de bash, mais ces comportements peuvent avoir été présents dans des versions précédentes. Par exemple, la modification pour utiliser les comparaisons basées sur les paramètres linguistiques régionaux avec la commande [[ a été introduite dans bash-4.1 et les versions précédentes utilisaient des comparaisons basées sur ASCII, aussi, activer compat32 activera également les comparaisons basées sur ASCII. Cette granularité peut ne pas être suffisante pour tous les usages, et, de ce fait, les utilisateurs doivent employer prudemment les niveaux de compatibilité. Lisez la documentation d'une fonctionnalité particulière pour découvrir le comportement actuel.

Bash-4.3 a introduit une nouvelle variable de l'interpréteur : BASH_COMPAT. La valeur affectée à cette variable (un numéro de version décimal, comme 4.2, ou un nombre entier correspondant à l'option compatNN, comme 42) détermine le niveau de compatibilité.

À partir de bash-4.4, bash a commencé à rendre obsolètes les niveaux de compatibilité plus anciens. Les options finiront par être retirées au profit de BASH_COMPAT.

Bash-5.0 était la dernière version pour laquelle il y avait une option de shopt particulière pour la version précédente. BASH_COMPAT est l'unique mécanisme pour contrôler le niveau de compatibilité dans les versions postérieures à bash-5.0.

Le tableau suivant décrit les changements de comportement contrôlés par chaque configuration de niveau de compatibilité. L'étiquette compatNN est un raccourci utilisé pour configurer le niveau de compatibilité à NN en utilisant un des mécanismes suivants. Pour les versions antérieures à bash-5.0, le niveau de compatibilité peut être fixé avec l'option de compatNN de shopt correspondante. Pour bash-4.3 et les versions ultérieures, la variable BASH_COMPAT est privilégiée et devient obligatoire pour bash-5.1 et les versions ultérieures.

–
La protection de la partie droite de l'opérateur de correspondance (=~) d'une expression rationnelle de la commande [[ n'a aucun effet particulier.
–
Les opérateurs < et > de la commande [[ ne prennent pas en compte les paramètres linguistiques régionaux actuels ; ils utilisent l'ordre ASCII.
–
Les opérateurs < et > de la commande [[ ne tiennent pas compte des paramètres linguistiques régionaux actuels lors des comparaisons de chaînes. Ils utilisent l'ordre ASCII. Les versions de bash antérieures à 4.1 utilisent la collation ASCII et strcmp(3). bash à partir de la version 4.1 utilise la séquence de collation des paramètres linguistiques régionaux et strcoll(3).
–
En mode POSIX, time peut être suivi d'options tout en continuant à être reconnu comme un mot réservé (c'est l'interprétation POSIX  267).
–
En mode POSIX, l'analyseur exige qu'il existe un nombre pair de guillemets simples dans la partie mot d'un développement des paramètres protégé par des guillemets doubles et les traite de façon particulière, ainsi les caractères entre les guillemets simples sont considérés comme protégés (c'est l'interprétation POSIX  221).
–
La chaîne de remplacement dans le motif de substitution entre guillemets doubles n'est pas sujette à la suppression des guillemets, comme dans les versions postérieures à bash-4.2.
–
En mode POSIX, les guillemets simples sont considérés particuliers lors du développement de la partie mot d'un développement des paramètres protégé par des guillemets doubles et peuvent être utilisés pour protéger une accolade fermante ou un autre caractère spécial (cela fait partie de l'interprétation POSIX  221) ; dans les versions ultérieures, les guillemets simples ne sont pas traités particulièrement dans les développements de mots entre guillemets doubles.
–
Les erreurs de développement de mots ne sont pas considérées comme des erreurs fatales qui provoquent l'échec de la commande en cours, même en mode POSIX (le comportement par défaut est de les traiter comme des erreurs fatales, ce qui fait que l'interpréteur termine).
–
Lors de l'exécution d'une fonction de l'interpréteur, l'état de la boucle (while/until/ etc.) n'est pas réinitialisé, aussi break ou continue dans cette fonction interrompent ou poursuivent la boucle dans le contexte de l'appel. Bash-4.4 et les versions ultérieures réinitialisent l'état de la boucle pour éviter cela.
–
L'interpréteur configure les valeurs utilisées par BASH_ARGV et BASH_ARGC de telle manière qu'elles peuvent se développer en paramètres positionnels de l'interpréteur même si le mode de traçage étendu n'est pas activé.
–
Un sous-interpréteur hérite des boucles du contexte de son parent, aussi break ou continue provoqueront la terminaison du sous-interpréteur. Bash-5.0 et les versions ultérieures réinitialisent l'état de la boucle pour éviter la terminaison.
–
Les affectations de variables précédant des commandes internes comme export et readonly qui configurent des attributs, continuent à affecter des variables ayant le même nom dans l'environnement d'appel même si l'interpréteur n'est pas en mode POSIX.
–
Bash-5.1 a modifié la manière dont $RANDOM est généré pour introduire un peu plus d'aléa. Si le niveau de compatibilité de l'interpréteur est fixé à 50 ou moins, bash retourne à la méthode de bash-5.0 et des versions antérieures, aussi l'ensemencement du générateur de nombres aléatoires en affectant une valeur à RANDOM produira la même séquence qu'avec bash-5.0.
–
Si la table de hachage des commandes est vide, les versions de bash antérieures à bash-5.1 affichaient un message d’information à cet effet même quand elles produisaient une sortie qui pouvait être réutilisée en entrée. Bash-5.1 supprime ce message quand l'option -l est fournie.
–
La commande interne unset traite les tentatives pour détruire les tableaux indicés par @ et * différemment selon que le tableau est un tableau indicé ou associatif, et autrement que dans les versions précédentes.
–
Les commandes arithmétiques ( ((...)) ) et les expressionsdans une instruction arithmétique for peuvent être développées plus d'une fois.
–
Les expressions utilisées comme arguments des opérateurs arithmétiques dans la commande conditionnelle [[ peuvent être développées plus d'une fois.
–
Les expressions dans le développement des accolades des paramètres de sous-chaînes peuvent être développées plus d'une fois.
–
Les expressions dans le développement de mot $((...)) peuvent être développées plus d'une fois.
–
Les expressions arithmétiques utilisées comme des indices de tableau indicé peuvent être développées plus d'une fois.
–
test -v, lorsqu'il reçoit un argument de A(@], où A est un tableau associatif existant, renverra vrai si le tableau a des éléments définis. Bash-5.2 recherchera et signalera l'existence d'une clé nommée @.
–
Le développement de mot ${paramètre[:]=valeur} renverra la valeur avant que toute transformation spécifique à la valeur (par exemple, une conversion en minuscule) ait été effectuée. Bash-5.2 renverra la valeur finale affectée à la variable.
–
L'analyse des substitutions de commande se comportera comme si les expressions génériques étendues (consultez la description de la commande interne shopt ci-dessus) sont activées, de sorte que l'analyse d'une substitution de commande contenant un motif extglob (par exemple, dans le cadre d'une fonction de l'interpréteur) n'échouera pas. Cela suppose que l'objectif est d'activer extglob avant l'exécution de la commande et des développements de mot. Elle échouera au moment du développement de mot si l'option extglob n'a pas été activée au moment où la commande est exécutée.
–
La commande interne test utilise son algorithme historique pour analyser les sous-expressions entre parenthèses lorsqu'elle reçoit cinq arguments ou plus.
–
Si l'option -p ou l'option -P sont fournies à la commande interne bind, bind traite tout argument restant après le traitement d'option comme des noms de commandes qui peuvent être associées, et affiche les raccourcis clavier associés à ces commandes, au lieu de traiter les arguments comme des séquences de touches à associer.

INTERPRÉTEUR RESTREINT

Si bash démarre sous le nom rbash ou si l'option -r est fournie lors de son appel, l'interpréteur devient restreint. Un interpréteur restreint permet de créer un environnement plus contrôlé qu'un interpréteur standard. Il se comporte de même la façon que bash excepté que les actions suivantes sont interdites ou non effectuées :

–
changer de répertoire avec cd ;
–
créer ou détruire les valeurs de SHELL, PATH, HISTFILE, ENV ou BASH_ENV ;
–
indiquer des noms de commandes contenant un / ;
–
indiquer un nom de fichier contenant un / comme argument de la commande interne . ;
–
utiliser l'option -p à la commande interne . pour indiquer un chemin de recherche ;
–
indiquer un nom de fichier contenant une barre oblique (/) comme argument de la commande interne history ;
–
indiquer un nom de fichier contenant une barre oblique comme argument de l'option -p de la commande interne hash ;
–
importer une définition de fonction dans l'environnement de l'interpréteur au démarrage ;
–
analyser les valeurs de BASHOPTS et de SHELLOPTS de l'environnement d'interpréteur au démarrage ;
–
rediriger la sortie en utilisant les opérateurs de redirection >, >|, <>, >&, &> et >> ;
–
utiliser la commande interne exec pour remplacer l'interpréteur par une autre commande ;
–
ajouter ou supprimer des commandes internes avec les options -f et -d de la commande interne enable ;
–
utiliser la commande interne enable pour activer les commandes internes de l'interpréteur désactivées ;
–
indiquer l'option -p à la commande interne commande ;
–
Désactiver le mode restreint avec set +r ou shopt -u restricted_shell.

Ces restrictions sont mises en place après la lecture de tous les fichiers d’initialisation.

When a command that is found to be a shell script is executed (see COMMAND EXECUTION above), rbash supprime toute restriction dans l'interpréteur créé pour exécuter le script.

VOIR AUSSI

http://pubs.opengroup.org/onlinepubs/9799919799/
http://tiswww.case.edu/~chet/bash/POSIX – une description du mode POSIX
sh(1), ksh(1), csh(1)
emacs(1), vi(1)
readline(3)

FICHIERS

/bin/bash
L'exécutable bash
/etc/profile
Le fichier d'initialisation commun à tout le système, exécuté pour les interpréteurs de connexion
/etc/bash.bashrc
Le fichier d’initialisation commun à tout le système pour les interpréteurs interactifs
/etc/bash.bash.logout
Le fichier de nettoyage des interpréteurs de connexion commun à tout le système, exécuté lorsqu'un interpréteur de connexion termine
~/.bash_profile
Le fichier d'initialisation personnel exécuté pour les interpréteurs de connexion
~/.bashrc
Le fichier d’initialisation personnel pour les interpréteurs interactifs
~/.bash_logout
Le fichier de nettoyage personnel des interpréteurs de connexion, exécuté lorsqu'un interpréteur de commandes de connexion termine
~/.bash_history
La valeur par défaut de HISTFILE, le fichier dans lequel bash sauvegarde l'historique des commandes
~/.inputrc
Le fichier d'initialisation personnel de readline

AUTEURS

Brian Fox, Free Software Foundation
bfox@gnu.org

Chet Ramey, Case Western Reserve University
chet.ramey@case.edu

SIGNALEMENTS DE BOGUES

Si vous trouvez un bogue dans bash, vous devriez le signaler. Tout d'abord vous devez vous assurer qu'il s'agit réellement d'un bogue et qu'il apparaît bien dans la dernière version disponible de bash. La dernière version est toujours disponible à partir de ftp://ftp.gnu.org/pub/gnu/bash/ et http://git.savannah.gnu.org/cgit/bash.git/snapshot/bash-master.tar.gz.

Une fois que vous avez déterminé qu'un bogue existe effectivement, utilisez la commande bashbug pour envoyer un signalement d'anomalie. Si vous avez un correctif, n'hésitez pas à l'envoyer en même temps ! Vous pouvez envoyer les suggestions et “philosophical” les rapports de bogues (en anglais) à bug-bash@gnu.org ou les poster dans le groupe Usenet gnu.bash.bug.

TOUS les signalements de bogues doivent contenir :

“recipe” qui démontre l'anomalie

bashbug insère automatiquement les trois premiers éléments de cette liste dans le formulaire qu'il fournit pour remplir un signalement d'anomalie.

Les commentaires et signalement d'anomalies concernant la version originale de cette page de manuel (en anglais) doivent être transmis à chet.ramey@case.edu. Ceux concernant cette version française peuvent être envoyés à debian-l10n-french@lists.debian.org.

BOGUES

Cet interpréteur de commandes est trop gros et trop lent.

Il existe quelques différences subtiles de comportement entre bash et les versions traditionnelles de sh, principalement à cause des spécifications POSIX

L'utilisation des alias peut avoir des conséquences inattendues.

Les commandes internes et les fonctions de l'interpréteur ne peuvent pas être suspendues/relancées.

Les commandes composées et les suites de commandes de la forme “a ; b ; c” ne sont pas gérées élégamment lorsqu'elles sont combinées à une suspension de processus. Quand un processus est arrêté, l'interpréteur exécute immédiatement la commande suivante de la liste ou interrompt toute boucle existante. Il suffit d'entourer de parenthèses la commande pour la forcer à créer un sous-interpréteur, qui, lui, pourra être suspendu en bloc ou à démarrer la commande en arrière-plan et la passer immédiatement au premier plan.

Les variables de type tableau ne peuvent pas (encore) être exportées.

TRADUCTION

La traduction française de cette page de manuel a été créée par Christophe Blaess <ccb@club-internet.fr>, Thierry Vignaud <tvignaud@mandriva.com>, Amand Tihon <amand@alrj.org>, Alain Portal <aportal@univ-montp2.fr>, Frederic Daniel Luc Lehobey <Frederic@Lehobey.net>, David Prévot <david@tilapin.org> et Jean-Pierre Giraud <jean-pierregiraud@neuf.fr>

Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org.

7 avril 2025 GNU Bash 5.3