BASH

Section: Manuel de l'utilisateur Linux (1)
Updated: 20 Janvier 1999
Index


NOM
SYNOPSIS
COPYRIGHT
DESCRIPTION
OPTIONS
ARGUMENTS
INVOCATION
DÉFINITIONS
MOTS RÉSERVÉS
GRAMMAIRE DU SHELL
Commandes simples
Pipelines
Listes
Commandes composées
COMMENTAIRES
PROTECTION
PARAMÈTRES
Paramètres Positionnels
Paramètres Spéciaux
Variables du Shell
Tableaux
EXPANSION
Expansion des accolades
Développement du Tilde
Remplacement des paramètres
Substitution de commandes
Évaluation Arithmétique
Substitution de Processus
Séparation des mots
Développement des noms de fichiers
Suppression des protections
REDIRECTION
Redirection d'entrée
Redirection de sortie
Redirection pour Ajout en Sortie
Redirection de la sortie standard et de la sortie d'erreur
Document en ligne
Dédoublement de descripteur de fichier
Ouverture en Lecture/Écriture d'un descripteur de fichier
ALIAS
FONCTIONS
CALCUL ARITHMÉTIQUE
EXPRESSIONS CONDITIONNELLES
DÉVELOPPEMENT DES COMMANDES SIMPLES
EXÉCUTION DES COMMANDES
ENVIRONNEMENT D'EXÉCUTION DES COMMANDES
ENVIRONNEMENT
CODE DE RETOUR
SIGNAUX
CONTRÔLE DES JOBS
SYMBOLE D'ACCUEIL (PROMPT)
BIBLIOTHÈQUE READLINE
Notation Readline
Initialisation de Readline
Affectation des touches de Readline
Variables de Readline
Constructions conditionnelles de Readine
Recherche
Noms des commandes Readline
Commandes de déplacement
Commandes de manipulation de l'historique
Commande d'édition de texte
Effacement et récupération
Arguments numériques
Complétion
Macros Claviers
Divers
HISTORIQUE
EXPANSION DE L'HISTORIQUE
Indicateur d'événement
Indicateurs de mots
Modificateurs
COMMANDES INTERNES DU SHELL
SHELL RESTREINT
VOIR AUSSI
FICHIERS
AUTEURS
RAPPORT DE BOGUE
BOGUES
TRADUCTION

NOM

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

SYNOPSIS

bash [options] [fichier]

COPYRIGHT

Bash est sous Copyright (C) 1989, 1999 de la Free Software Foundation, Inc.

DESCRIPTION

Bash est un interpréteur (Shell) compatible sh qui exécute les commandes lues depuis l'entrée standard, ou depuis un fichier. Bash incorpore également des fonctionnalités provenant des interpréteurs Korn et C-shell (ksh et csh).
Bash est conçu pour être conforme aux spécifications IEEE concernant les shells et les outils Posix (Groupe de travail de l'IEEE 1003.2).

OPTIONS

En plus des caractères d'options documentés dans la description de la commande interne set, bash accepte les arguments suivants lorsqu'on l'invoque :
-c chaîne
Si l'argument -c est présent, les commandes sont interprétées depuis la chaîne fournie. S'il existe d'autres arguments après la chaîne, ils sont transmis comme paramètres positionnels, en commençant par $0.
-r
Si l'option -r est présente, l'interpréteur est restreint (voir SHELLS RESTREINTS plus bas).
-i
Si l'option -i est présente, l'interpréteur est interactif.
-s
Si l'option -s est présente, ou s'il n'y a plus d'arguments sur la ligne de commande, après le traitement des options, l'interprétation se fera depuis l'entrée standard. Cette option permet de remplir les paramètres positionnels tout en invoquant un shell interactif.
-D
Une liste de toutes les chaînes entre '"' et précédées de $ est affichée sur la sortie standard. Ce sont les chaînes qui sont sujettes à une traduction quand la localisation n'est ni celle du C, ni celle du standard POSIX. Cela nécessite l'option -n ; aucune commande ne sera exécutée.
--
Deux caractères -- permettent d'indiquer la fin des options, et empêchent le traitement des arguments restants. Ces derniers sont alors traités comme des noms de fichiers et des paramètres. - est équivalent à --.

Bash reconnaît également plusieurs options multi-caractères. Ces options doivent, pour être reconnues, apparaître sur la ligne de commande avant les options mono-caractère.
--dump-po-strings
Équivalent à -D, mais la sortie est dans le format des fichiers po (objets portables) de l'outil Gnu gettext.
--dump-strings
Équivalent à -D.
--help
Affiche un message d'aide sur la sortie standard et se termine avec succès.
--login
Demande que bash Se comporte comme un shell de login. (Voir INVOCATION plus bas).
--noediting
Ne pas utiliser la bibliothèque GNU readline pour la lecture des lignes de commande, lorsque le shell est interactif.
--noprofile
Ne lire ni le fichier de configuration générale /etc/profile ni les fichiers personnalisés ~/.bash_profile, ~/.bash_login, ou ~/.profile. Par défaut bash lit ces fichiers lorsqu'il est invoqué comme shell de login (voir le paragraphe INVOCATION plus bas).
-norc
Ne pas lire le fichier de configuration personnalisée ~/.bashrc lorsque le shell est interactif. Cette option est activée par défaut lorsque bash est invoqué sous le nom sh.
--posix
Aligner le comportement de bash sur le standard Posix 1003.2, en ce qui concerne les options dont l'action par défaut diffère de ce standard.
--rcfile fichier
Exécuter les commandes contenues dans le fichier mentionne, plutôt que celles du fichier de configuration personnelle ~/.bashrc, si le shell est interactif (voir le paragraphe INVOCATION plus bas).
--restricted
Le shell devient restreint (voir le paragraphe SHELLS RESTREINTS plus bas).
--rpm-requires
Affiche une liste des fichiers qui sont nécessaires pour le lancement d'un script shell. Ceci nécessite l'option '-n' et est soumis aux mêmes limites que les vérifications d'erreurs à la compilation ; les back-quotes, les tests [] et les évalutations ne sont pas analysés, et certaines erreurs peuvent être oubliées.
--verbose
Équivalent à -v
--version
Afficher le numéro de version de bash sur la sortie standard et terminer avec succès.

ARGUMENTS

S'il reste des arguments sur la ligne de commande après l'analyse des options, et si ni l'option -c, ni l'option -s ne sont présentes, le premier argument est supposé être le nom du fichier dans lequel lire les commandes. Lorsque bash est invoqué de cette manière, $0 contient le nom du fichier, et les autres paramètres positionnels contiennent les arguments restants. Bash lit, et exécute, les commandes depuis ce fichier, puis se termine. Le code de retour de bash est celui de la dernière commande exécutée dans le fichier script. Si aucune commande n'a été exécutée, le code de retour est 0.

INVOCATION

Un shell est dit de login si le premier caractère de son argument numéro zéro est un -, ou s'il est invoqué avec l'option -login.
Un shell est interactif si son entrée standard et sa sortie standard sont toutes deux connectées à un terminal (déterminé par la fonction isatty(3)), ou s'il est invoqué avec l'option -i. Le paramètre PS1 est positionné, et le paramètre $- contient la lettre i si bash est interactif, ce qui permet à un script ou à un fichier de démarrage de vérifier l'état du shell.
Le paragraphe suivant décrit comment bash exécute ses fichiers d'initialisation. Si l'un de ces fichiers existe mais n'est pas accessible en lecture, bash signale une erreur. Les tildes sont remplacées par des noms de fichiers comme décrit dans le paragraphe Développement du Tilde de la section Développement.
Lorsque bash est lancé comme shell de login interactif, ou comme shell non-interactif avec l'option --login, il lit et exécute tout d'abord les commandes se trouvant dans le fichier /etc/profile s'il existe. Après lecture de ce fichier, il recherche ~/.bash_profile, ~/.bash_login, et ~/.profile, dans cet ordre, et exécute les commande se trouvant dans le premier fichier existant et accessible en lecture. L'option --noprofile peut être utilisée au démarrage du shell pour empêcher ce comportement.
Lorsqu'un shell de login se termine, bash lit et exécute les commandes du fichier ~/.bash_logout, s'il existe.
Quand un shell interactif démarre sans être un shell de login, bash lit et exécute les commandes se trouvant dans ~/.bashrc s'il existe. Ce comportement peut être inhibé à l'aide de l'option --norc. L'option --rcfile fichier forcera bash à exécuter les commandes dans fichier plutôt que dans ~/.bashrc.
Quand bash est démarré de manière non-interactive, pour lancer un script shell par exemple, il recherche 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 se trouvait en début de script :
if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi

mais la valeur de la variable PATH n'est pas utilisée pour rechercher le fichier.
Si bash est invoqué sous le nom sh, il essaye d'imiter le comportement de démarrage des versions historiques de sh autant que possible, tout en restant conforme au standard Posix. Lorsqu'il est invoqué comme shell de login interactif (ou non-interactif avec l'option --login), il essaye d'abord d'exécuter les commandes se trouvant dans /etc/profile et ~/.profile, dans cet ordre. L'option -noprofile peut toujours être utilisée pour désactiver ce comportement. Quand il est invoqué en tant que shell 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 shell invoqué sous le nom sh n'essaye pas d'exécuter d'autre fichier de démarrage, l'option --rcfile n'a aucun effet. Un shell non interactif invoqué sous le nom sh ne lit aucun autre fichier d'initialisation. Quand il est invoqué sous le nom sh, bash entre en mode posix après avoir lu les fichiers d'initialisation.
Quand bash est invoqué en mode posix, avec l'option -posix sur la ligne de commande, il suit ce standard en ce qui concerne les fichiers de démarrage. Dans ce cas, la variable ENV est développée, et le fichier qui en résulte est exécuté. On n'exécute pas d'autre fichier d'initialisation.
Bash tente de déterminer s'il est exécuté par le démon lançant les shells distants (généralement appelé rshd ). Si bash se rend compte qu'il est exécuté par rshd, il lit et exécute les commandes de ~/.bashrc si ce fichier existe et est lisible. Il n'a pas ce comportement lorsqu'il est invoqué sous le nom sh. L'option --norc peut être utilisé pour interdire ce comportement, et l'option --rcfile permet de forcer l'utilisation d'un autre fichier, mais rshd n'utilise généralement pas ces options et ne permet pas non plus leur utilisation.
Si le shell est lancé avec un identifiant effectif d'utilisateur (ou de groupe) différent de l'identifiant réel, et si l'option -p n'est pas utilisée, aucun fichier d'initialisation n'est lu, les fonctions du shell ne sont pas importées depuis l'environnement, la variable SHELLOPTS est ignorée si elle apparaît dans l'environnement, et l'identifiant effectif de l'utilisateur (du groupe) est remplacé par l'ID réel. Si l'option -p est fournie, le démarrage est le même mais l'ID effectif n'est pas modifié.

DÉFINITIONS


Les définitions suivantes sont utilisées tout au long de ce document.
blanc
Un espace ou une tabulation.
mot
une séquence de caractères considérée comme une unité élémentaire par le shell. On parle également de token (jeton).
nom
un mot ne contenant que des caractères alphanumériques ou le soulignement (underscore), commençant par une lettre ou un soulignement. On s'y réfère également sous le terme identificateur.
méta-caractère
Un caractère qui, non protégé, sépare les mots. Un de ceux-ci :

| & ; ( ) < > espace tabulation

opérateur de contrôle
Un jeton ayant une fonction de contrôle. L'un des symboles suivants :

|| & && ; ;; ( ) | <retour-chariot>

MOTS RÉSERVÉS

Les mots réservés ont une signification spéciale pour le shell. Les mots suivants sont réservés et interprétés par le shell lorsqu'ils ne sont pas protégés, et s'il s'agit soit du premier mot d'une commande simple, soit du troisième mot d'une commande case ou for (voir le paragraphe GRAMMAIRE DU SHELL ci-dessous).
! case do done elif else esac fi for function if in select then until while { } time [[ ]]

GRAMMAIRE DU SHELL

Commandes simples


Une commande simple est une séquence d'affectations de variables facultative, suivie de mots séparés par des blancs et des redirections, et terminée par un opérateur de contrôle. Le premier mot indique la commande à exécuter. Les mots suivants sont transmis en argument à cette commande.
La valeur de retour d'une commande simple est son code de sortie, ou 128+n si la commande a été interrompue par le signal n.

Pipelines


Un pipeline est une séquence d'une ou plusieurs commandes séparées par le caractère |. Le format d'un pipeline est :

[time [-p]] [ ! ] commande_1 [ | commande_2 ... ]

La sortie standard de la commande_1 est connectée à l'entrée standard de la commande_2. Cette connexion est établie avant toute redirection indiquée dans une commande elle-même (voir le paragraphe REDIRECTION plus bas).
Si le mot réservé ! précède un pipeline, la valeur de sortie de celui-ci sera la NÉGATION logique de la valeur de retour de la dernière commande. Sinon, le code de retour d'un pipeline sera celui de la dernière commande. L'interpréteur attend la fin de toutes les commandes du pipeline avant de renvoyer une valeur.
Si le mot réservé time précède le pipeline, les temps passés par le programme en mode utilisateur et système sont indiqués quand le pipeline se termine. L'option -p change le format de sortie pour celui spécifié par POSIX. La variable TIMEFORMAT peut être affectée avec une chaîne de format indiquant comment les informations horaires doivent être affichées; consultez la descriptions de TIMEFORMAT dans VariablesduShell plus bas.
Chaque commande du pipeline est exécutée comme un processus indépendant (c'est à dire dans un sous-shell).

Listes


Une liste est une séquence d'un ou plusieurs pipelines séparés par l'un des opérateurs ;, &, &&, ou ||, et terminée éventuellement par ;, &, ou <retour-chariot>.
Dans cette liste d'opérateurs, && et || ont une précédence identique, suivis par ; et &, qui ont également une précédence identique.
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-shell. L'interpréteur n'attend pas que la commande se termine et retourne un code 0. Les commandes séparées par un ; sont exécutées successivement, l'interpréteur attend que chaque commande se termine avant de lancer la suivante. Le code de retour est celui de la dernière commande exécutée.
Les opérateurs de contrôle && et || indiquent respectivement une liste liée par un ET, et une liste liée par un OU. Une liste ET a la forme

commande_1 && commande_2

commande_2 est exécutée si, et seulement si, commande_1 renvoie un code de retour nul.
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 non-nul. La valeur de retour des listes ET et OU est celle de la dernière commande exécutée dans la liste.

Commandes composées


Une commande composée est l'une des constructions suivantes :
(liste)
liste est exécutée dans un sous-shell. Les affectations de variables, et les commandes internes qui affectent l'environnement de l'interpréteur n'ont pas d'effet une fois que la commande se termine. Le code de retour est celui de la liste.
{ liste; }
liste est simplement exécutée avec l'environnement du shell en cours. liste doit se terminer par un caractère fin-de-ligne ou un point-virgule. Cette construction est connue sous le nom de commandes groupées. Le code de retour est celui de la liste.
L'expression est évaluée selon les règles décrites plus bas au paragraphe ÉVALUATIONARITHMÉTIQUE. Si la valeur arithmétique de l'expression est non-nulle, le code renvoyé est zéro ; sinon 1 est renvoyé. Cela est strictement identique à let "expression".
[[ expression ]]
Renvoie 1 ou 0 selon la valeur de la condition expression. les expressions sont composées d'éléments primaires décrits dans EXPRESSIONSCONDITIONNELLES. Le coupage des mots et l'expansion des chemins ne sont pas réalisés sur les portions entre [[ et ]]; l'expansion des tildes, des paramètres, des variable, des expressions arithmétiques, la substitution des commandes et des processus, ainsi que la disparition des apostrophes sont réalisés.
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 et est recherchée selon les règles décrites dans Motifs génériques. La valeur renvoyée est 0 si les chaînes correspondent (ou respectivement ne correspondent pas), et 1 sinon. Toute partie du motif peut être protégée avec des apostrophes pour forcer sa comparaison en tant que chaîne (sans développement).
Les expressions peuvent être combinées en utilisant les opérateurs suivants, par ordre décroissant de priorité :
( expression )
Retourne la valeur de l'expression. Cela peut être utilisé pour outrepasser la priorité normale des opérateurs.
! expression
Vraie si expression est vraie.
expression1 && expression2
Vraie si expression1 et expression2 sont toutes les deux vraies.
expression1 || expression2 Vraie si expression1 ou expression2 est vraie.

Les opérateurs && et || n'exécutent pas expression2 si la valeur de expression1 suffit à déterminer le code de retour de l'expression conditionnelle entière.
for nom [ in mot ] ; do liste ; done
La liste de mots à la suite de in est développée, créant une liste d'éléments. La variable nom prend successivement 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 ayant une valeur (voir le paragraphe PARAMÈTRES plus bas). Le code de retour est celui de la dernière commande exécutée. Si le développement de ce qui suit in est une liste vide, aucune commande n'est exécutée et 0 est renvoyé.
select nom [ in mot ] ; do liste ; done
La liste de mots à la suite de in est développée, créant une liste d'éléments. L'ensemble des mots développés est imprimé sur la sortie d'erreur standard, chacun précédé par un nombre. Si in mot est omis, les paramètres positionnels sont imprimés (voir le paragraphe PARAMÈTRES plus bas). Le symbole d'accueil PS3 est affiché, et une ligne est lue depuis l'entrée standard. Si la ligne est constituée d'un nombre correspondant à l'un des mots affichés, la variable nom est remplie avec ce mot. Si la ligne est vide, les mots et le symbole d'accueil sont affichés à nouveau. Si une fin de fichier (EOF) est lue, la commande se termine. Pour toutes les autres valeurs, la variable nom est vidée. La ligne lue est stockée dans la variable REPLY. La liste est exécutée après chaque sélection, jusqu'à ce qu'une commande break ou return soit atteinte. Le code de retour de select est celui de la dernière commande exécutée dans la liste, ou zéro si aucune commande n'est exécutée.
case mot in [ motif [ | motif ]
Une commande case commence d'abord par développer le mot, puis essaye de le mettre en correspondance successivement avec chacun des motifs en utilisant les mêmes règles que pour les noms de fichiers (voir le paragraphe Développement des noms de fichiers plus bas). Quand une correspondance est trouvée, la liste associée est exécutée. Dès qu'un motif correct a été trouvé, il n'y a plus d'autre essais. Le code retour est zéro si aucun motif ne correspond, sinon il s'agit du code de la dernière commande exécutée dans la liste.
if liste ; then liste ; [ elif liste ; then liste ; ] ... [ else liste ; ] fi
La liste du if est exécutée. Si son code de retour est nul, la liste du then est exécutée. Sinon, chacune des listes des elif est exécutée successivement, et si un code de retour est nul, la liste du then associé est exécutée, et la commande se termine. En dernier ressort, la liste du else 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é vérifiée.
while liste ; do liste ; done
until liste ; do liste ; done
La commande while répète la liste du do tant que la dernière commande de la liste du while renvoie un code de retour nul. La commande until agit de même manière, sauf que le test est négatif, et la liste du do est exécutée tant que la liste du until renvoie un code non-nul. Le code de retour des commandes while et until est celui de la dernière commande exécutée dans la liste do, ou zéro si aucune commande n'a été exécutée.
[ function ] nom () { liste; }
Ceci définit une fonction possédant le nom mentionné. Le corps de cette fonction est la liste de commandes entre { et }. Cette liste est exécutée dès que le nom de la fonction est invoqué en tant que commande simple. Le code de retour est celui de la dernière commande exécutée dans le corps de la fonction. (voir le paragraphe FONCTIONS plus bas)

COMMENTAIRES

Dans un shell non-interactif, ou dans un shell interactif avec l'option -o interactive-comments activée par la commande interne shopt (voir COMMANDES INTERNES DU SHELL plus bas), un mot commençant par # permettra d'ignorer tous les caractères restants sur la ligne. Un shell interactif sans l'option interactive-comments n'autorise pas les commentaires. L'option interactive_comments est activée par défaut dans les shells interactifs.

PROTECTION

Les protections (quoting) permettent de forcer l'interpréteur à ignorer la signification spéciale de certains caractères ou mots. Les protections peuvent être utilisées pour empêcher 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éta-caractères mentionnés dans le paragraphe DÉFINITIONS plus haut ont des significations spéciales pour le shell, et doivent être protégés pour garder leur propre valeur. Il y a trois mécanismes de protection : le caractère d'échappement, les apostrophes (quote) et les guillemets (double-quote).
Un caractère backslash (\), quand il n'est pas protégé, représente le caractère d'échappement. Il préserve la valeur littérale du caractère qui le suit, à l'exception du <retour-chariot>. Si une séquence \<retour-chariot> apparaît, et si le backslash n'est pas protégé, l'ensemble \<retour-chariot> est considéré comme une continuation de ligne (autrement dit, il est ignoré).
Encadrer des caractères entre des apostrophes simples préserve la valeur littérale de chacun des caractères. Une apostrophe ne peut pas être placée entre deux apostrophes, même si elle est précédée d'un backslash.
Encadrer des caractères entre des guillemets préserve la valeur littérale de chacun des caractères sauf $, `, et \. Les caractères $ et ` conservent leurs significations spéciales, même entre guillemets. Le backslash ne conserve sa signification que lorsqu'il est suivi par $, `, ", \, ou <fin-de-ligne>. Un guillemet peut être protégé entre deux guillemets, à condition de le faire précéder par un backslash.
Les caractères spéciaux * et @ ont des significations spéciales lorsqu'ils se trouvent entre guillemets (voir le paragraphe PARAMÈTRES ci-dessous).
Les mots de la forme $'chaîne' sont traités différemment. Le mot est développé en chaîne avec les séquences d'échappement remplacées par les séquences standards du C ANSI:
\a
alerte (cloche alias bip)
\b
effacement arrière
\e
un caractère escape
\f
fin de page
\n
fin de ligne
\r
retour chariot
\t
tabulation horizontale
\v
tabulation verticale
\\
anti-slash (backslash)
\nnn
le caractère dont le code ASCII en octal est nnn (un à trois chiffres)
\xnnn
le caractère dont le code ASCII en hexadécimal est nnn (un à trois chiffres)

Le résultat après traduction est protégé par des apostrophes comme si le symbole dollar n'avait pas été présent.
Une chaîne entre guillemets précédée d'un symbole dollar ($) sera traduite selon la localisation en vigueur. Si la locale courante est C ou POSIX, le symbole dollar est ignoré. Si la chaîne a subi une traduction ou des remplacements, le résultat est protégé par des guillemets.

PARAMÈTRES

Un paramètre est une entité permettant de stocker des valeurs, comme les variables dans les langages de programmation courants. Il peut se présenter sous forme d'un nom, d'un nombre, ou d'un des caractères spéciaux décrits plus bas, dans Paramètres Spéciaux. Au niveau du shell, une variable est un paramètre muni d'un nom.
Un paramètre existe dès qu'on lui attribue une valeur. Une chaîne vide est une valeur valide. Une fois qu'une variable existe, elle ne peut être détruite qu'en utilisant la commande interne unset (voir COMMANDES INTERNES DU SHELL plus bas).
Une variable peut recevoir une valeur par une affectation de la forme

nom=[valeur]

Si aucune valeur n'est indiquée, la variable reçoit une chaîne vide. Toute valeur est soumise aux principes de développement du tilde, des paramètres et des variables, de la substitution de commandes, de l'évaluation arithmétique, et de la suppression des protections (voir EXPANSION plus bas). Si une variable a son attribut -i activé (voir declare plus bas, dans le paragraphe COMMANDESINTERNESDUSHELL) alors la valeur est soumise à l'évaluation arithmétique, même si la syntaxe $((...)) n'apparaît pas (voir ÉVALUATION ARITHMÉTIQUE plus bas). Les mots ne sont pas tronqués, sauf avec la séquence "$@" comme cela est expliqué dans le paragraphe Paramètres Spéciaux ci-dessous. Le développement des noms de fichiers n'est pas effectué.

Paramètres Positionnels


Un paramètre positionnel est un paramètre indiqué par un ou plusieurs chiffres (à l'exception du chiffre 0 seul). Les paramètres positionnels sont remplis avec les arguments du shell lors de son invocation. Ils peuvent être modifiés avec la commande interne set. On ne peut pas utiliser d'assignation pour modifier le contenu d'un paramètre positionnel. Les paramètres positionnels sont temporairement modifiés lors de l'exécution d'une fonction du shell (voir le paragraphe FONCTIONS plus bas).
Un paramètre positionnel constitué de plusieurs chiffres doit être encadré par des accolades lors de son développement (voir EXPANSION plus bas).

Paramètres Spéciaux


Il existe plusieurs paramètres ayant un comportement particulier. Ces paramètres peuvent uniquement être consultés, on ne peut pas les modifier.
*
Se développe en l'ensemble des paramètres positionnels, commençant à 1. Quand le développement se produit entre des guillemets, * se transforme en un seul mot constitué de la valeur de tous les paramètres positionnels séparées par le premier caractère de la variable spéciale IFS. Ceci signifie que "$*" est équivalent à "$1c$2c...", dans laquelle 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 nulle, les paramètres sont juxtaposés sans séparation.
@
Se développe en l'ensemble des paramètres positionnels, commençant à 1. Quand le développement a lieu entre guillemets, chaque paramètre se transforme en un mot distinct. Ceci signifie que "$@" est équivalent à "$1" "$2" ... Quand il n'y a pas de paramètres positionnels, "$@" et $@ sont simplement éliminés.
#
Correspond au nombre de paramètres positionnels, en base décimale.
?
Fournit le code de retour du dernier pipeline exécuté à l'avant-plan.
-
Est remplacé par la liste des options du shell indiquées durant l'invocation, configurées avec la commande interne set ou positionnées par le shell lui-même (comme avec l'option -i ).
$
Se transforme en PID du shell. Dans un sous-shell (), il se transforme en PID du shell, et non pas du sous-shell.
!
Se transforme en PID de la commande (asynchrone) exécutée en arrière-plan le plus récemment.
0
Se développe pour donner le nom du shell ou du script. Ce paramètre est rempli lors de l'initialisation de l'interpréteur. Si bash est invoqué 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 chemin d'accès utilisé pour invoquer bash, comme il l'a reçu en argument zéro.
_
Au lancement du shell, contient le chemin absolu du shell ou du script en cours d'exécution. Devient le dernier argument de la commande précédente, après développement. Correspond aussi au chemin d'accès complet de chaque commande exécutée, et se retrouve dans l'environnement exporté à cette commande. Lors de la vérification de l'arrivée de courrier, contient le nom du fichier de courrier en cours de vérification [Ndt: généralement /var/mail/nom_de_l_utilisateur].

Variables du Shell


Les variables suivantes sont remplies par l'interpréteur de commandes :
PPID
L'ID du processus parent du shell. Cette variables est protégée en écriture.
PWD
Le répertoire de travail en cours, tel qu'il est configuré par la commande cd.
OLDPWD
Le répertoire de travail précédent, configuré par la commande cd.
REPLY
Contient la ligne d'entrée lue par la commande interne read lorsqu'elle n'a pas d'argument.
UID
Contient l'ID de l'utilisateur, initialisé au démarrage du shell. C'est une variable en lecture seulement
EUID
Contient l'UID effectif de l'utilisateur, initialisé au démarrage du shell. Cette variable est en lecture seule.
GROUPS
Variable de type tableau contenant la liste des groupes dont l'utilisateur est membre. Cette variables est protégée en écriture.
BASH
Se développe en chemin d'accès complet à l'instance courrante de bash.
BASH_VERSION
Correspond au numéro de version de cette instance de bash.
BASH_VERSINFO
Une variable tableau protégée en écriture dont les membres représentent la version de cette instance de bash. Cette valeur est renseignée de la manière suivante:
BASH_VERSINFO[0]
Le numéro majeur de la version (release).
BASH_VERSINFO[1]
Le numéro mineur de la version (version).
BASH_VERSINFO[2]
Le niveau de patch.
BASH_VERSINFO[3]
Le numéro de compilation.
BASH_VERSINFO[4]
Le statut de cette version (e.g., beta1).
BASH_VERSINFO[5]
La valeur de MACHTYPE.
SHLVL
(NDT : Lire SH LVL - Shell Level - Niveau d'interpréteur) Incrémenté de 1 à chaque invocation d'une instance de bash.
RANDOM
A chaque fois que ce paramètre est référencé, un entier aléatoire entre 0 et 32767 est engendré. Cette séquence de nombres aléatoires peut être initialisée en assignant une valeur à RANDOM. Si RANDOM est détruit (commande unset), il perd son comportement spécial, même s'il est recréé plus tard.
SECONDS
A chaque fois que ce paramètre est lu, le nombre de secondes écoulées depuis le lancement de l'interpréteur est renvoyé. Si une valeur est affectée à SECONDS, il renverra lors des lectures ultérieures le nombre de secondes écoulées depuis l'affectation, augmenté de la valeur fournie. Si SECONDS est détruit (commande unset), il perd son comportement spécial, même s'il est recréé plus tard.
LINENO
Chaque fois que ce paramètre est référencé, le shell 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étruit (commande unset), il perd son comportement spécial, même s'il est recréé plus tard.
HISTCMD
Le numéro d'historique, ou le rang dans la liste d'historique, de la commande en cours. Si HISTCMD est détruit (commande unset), il perd son comportement spécial, même s'il est recréé plus tard.
DIRSTACK
Une variable de type tableau (voir Tableaux plus bas) représentant le contenu courant de la pile de répertoires. Les répertoires apparaissent dans la pile dans l'ordre dans lequel la commande interne dirs les affiche. Il est possible de modifier directement cette variables mais les commandes internes pushd et popd doivent être utilisées pour ajouter et enlever des répertoires. Modifier cette variable ne modifiera pas le répertoire courant. Si DIRSTACK est détruite, elle perd ses propriétés spéciales, même si elle est recréée.
PIPESTATUS
Une variable de type tableau (voir Tableaux plus bas) contenant une liste des codes de retour des derniers processus exécutés en avant-plan (éventuellement une seule commande).
OPTARG
La valeur du dernier argument d'option traité par la commande interne getopts (voir le paragraphe COMMANDES INTERNES DU SHELL plus bas).
OPTIND
Le rang du prochain argument à traiter avec la commande getopts (voir le paragraphe COMMANDES INTERNES DU SHELL plus bas).
HOSTNAME
Automatiquement affectée avec le nom de l'ordinateur.
HOSTTYPE
Automatiquement rempli avec une chaîne qui décrit de manière unique le type de machine sur laquelle bash s'exécute. La valeur par défaut dépend du système.
OSTYPE
Automatiquement rempli avec une chaîne qui décrit le système d'exploitation sur lequel bash s'exécute. La valeur par défaut dépend du système.
MACHTYPE
Automatiquement affectée avec une chaîne décrivant le type du système sur lequel bash s'exécute, dans le format standard de GNU processeur-compagnie-système. La valeur par défaut dépend du système.
SHELLOPTS
Liste des options activées du shell, séparées par des virgules. Chaque mot de la liste est un argument valide pour l'option -o de la commande interne set (voir COMMANDES INTERNES DU SHELL). Les options apparaissant dans SHELLOPTS sont celle indiquées comme actives par set -o. Si cette variable est dans l'environnement au lancement de bash, chaque option de la liste est activée avant de lire les fichiers d'initialisation. Cette variable est protégée en écriture.

Les variables suivantes sont utilisées par l'interpréteur. Dans certains cas, bash affecte des valeurs par défaut aux variables, ces cas sont décrits plus bas.
IFS
Le Séparateur de Champs Interne Internal Field Separator qui est utilisé pour séparer les mots après les développements, et pour découper les lignes en mots avec la commande interne read. La valeur par défaut est ``<espace><tabulation><retour-chariot>''.
PATH
Le chemin de recherche des commandes à exécuter. Il s'agit d'une liste de répertoires, séparés par des deux-points (`:') que l'interpréteur consulte lorsqu'il recherche une commande (voir le paragraphe EXÉCUTION DES COMMANDES plus bas). Le chemin par défaut dépend du système, et de la configuration choisie par la personne installant bash. Une configuration fréquente est ``/bin:/usr/bin:/usr/local/bin:.''.
HOME
Le répertoire personnel de l'utilisateur. C'est l'argument par défaut de la commande interne cd. Cette variable sert également lors du développement du tilde.
CDPATH
Le chemin de recherche de la commande interne cd. Il s'agit d'une liste de répertoires, séparés par des deux-points (`:') que l'interpréteur consulte lorsqu'il cherche un sous-répertoire destination de la commande cd. Une configuration possible serait ``.:~:/usr''.
BASH_ENV
Si ce paramètre est configuré lorsque bash exécute un script, sa valeur est considérée comme un nom de fichier, contenant les commandes d'initialisation de l'interpréteur, comme .bashrc. La valeur de BASH_ENV est soumise au remplacement des paramètres, substitution de commandes, et évaluation arithmétique avant d'être considérée comme nom de fichier. PATH n'est pas utilisée pour rechercher le fichier obtenu.
MAIL
Si ce paramètre correspond à un nom de fichier, et si la variable MAILPATH n'est pas configurée, bash informera l'utilisateur si un courrier arrive dans le fichier indiqué.
MAILCHECK
Indique une période (en secondes), par défaut 60, avec laquelle bash vérifiera si un nouveau courrier est arrivé. Lorsque le délai est écoulé, le shell vérifiera la présence d'un courrier avant d'afficher son symbole d'accueil. Si cette variable est détruite, le shell cessera la vérification.
MAILPATH
Il s'agit d'une liste de fichiers séparés par des deux-points (`:'), dans lesquels on vérifiera l'arrivée de courrier. Le nom d'un fichier peut être suivi d'un point d'interrogation, puis d'une chaîne de caractères indiquant le message à afficher en cas de courrier. Dans cette chaîne, le paramètre $_ correspond au nom du fichier. Exemple:

MAILPATH='/usr/spool/mail/bfox?"Tu as du courrier":~/shell-mail?"$_ a du courrier"'
Bash fournit une valeur par défaut pour cette variable, mais l'emplacement du fichier boîte à lettres dépend du système (par exemple /usr/spool/mail/$USER).
PS1
La valeur de ce paramètre est développée puis utilisée comme symbole d'accueil principal (voir le paragraphe SYMBOLE D'ACCUEIL ci-dessous). La valeur par défaut est ``\s-\v\$ ''.
PS2
La valeur de ce paramètre est développée comme PS1 puis utilisée comme symbole d'accueil secondaire. Par défaut il s'agit de ``> ''.
PS3
La valeur de ce paramètre est utilisée comme symbole pour la commande select (voir GRAMMAIRE DU SHELL plus haut).
PS4
La valeur de ce paramètre est développée comme PS1 puis affichée entre chaque commande lors d'un suivi d'exécution. Le premier caractère de PS4 est répété autant de fois que nécessaire pour indiquer le niveau d'imbrication. La valeur par défaut est ``+ ''.
TIMEFORMAT
La valeur de ce paramètre est utilisée en tant que chaîne de format pour afficher le temps consommé dans les pipelines préfixés avec le mot réservé time. Le caractère % introduit une séquence d'échappement qui est développée avec une valeur de temps ou une autre information. Les séquences d'échappement et leurs significations sont les suivantes; les accolades entourent les parties facultatives.
%%
Un % seul (non interprété).
%[p][l]R
Le temps écoulé en secondes.
%[p][l]U
Le temps processeur écoulé en mode utilisateur en secondes.
%[p][l]S
Le temps processeur écoulé en mode système en secondes.
%P
Le pourcentage de temps processeur utilisé calculé avec (%U + %S) / %R.
La séquence facultative p est un chiffre indiquant la précision, le nombre de chiffres après la virgule. Une valeur de 0 provoque l'affichage de nombre entiers. Trois chiffres au plus peuvent être affichés après la virgule; tout chiffre supérieur à 3 sera changé en 3. Si p n'est pas indiqué, 3 est utilisé.
La séquence optionnelle l spécifie un format étendu, incluant les minutes, de la forme MMmSS.FFs. La valeur de p détermine si la partie décimale est affichée ou non.
Si cette variable n'est pas assignée, bash réagit comme si la valeur $'\nreal\t%3lR\nuser\t%3lU\nsys %3lS' avait été affectée. Si la variable est vide, aucune information n'est affichée. Un caractère fin-de-ligne est ajouté à la fin de l'affichage.
HISTSIZE
Le nombre de commandes à mémoriser dans l'historique (voir le paragraphe HISTORIQUE plus bas). La valeur par défaut est 500.
HISTFILE
Le nom du fichier d'historique pour la mémorisation des commandes(voir HISTORIQUE plus bas). Par défaut, il s'agit de ~/.bash_history. Si cette variable est détruite, l'historique n'est pas enregistré en fin de shell.
HISTFILESIZE
Le nombre maximal de lignes contenues dans le fichier historique. Quand cette variable contient une valeur, le fichier historique est tronqué, si besoin est, pour ne contenir que ce nombre de lignes. La valeur par défaut est 500. Ce fichier est tronqué à cette taille après écriture quand un shell interactif se termine.
OPTERR
Si cette variable contient la valeur 1, bash affiche les messages d'erreurs déclenchés par la commande interne getopts (voir le paragraphe COMMANDES INTERNES DU SHELL plus bas). OPTERR est initialisé avec la valeur 1 à chaque invocation du shell, ou au lancement d'un script.
LANG
Détermine la localisation pour toutes les catégories non spécifiquement précisées par une variable commençant par LC_.
LC_ALL
Cette variable surcharge LANG et toute autre variable LC_ indiquant la localisation.
LC_COLLATE
Cette variable détermine l'ordre des lettres lors du tri des chemins ainsi que le comportement des expressions des intervalles, des classes d'équivalences, et de la comparaison de chaînes lors de la recherche de motifs et le développement des chemins.
LC_CTYPE
Cette variable détermine l'interprétation des caractères et le comportement des classes de caractères [Ndt: ex: [:alpha] ] lors du développement des chemins et de la recherche de motifs.
LC_MESSAGES
Cette variable détermine le langage des messages et celui utilisé pour traduire les chaînes entre guillemets précédés par un $.
PROMPT_COMMAND
Lorsque cette variable contient une valeur, celle-ci est exécutée en tant que commande, avant l'affichage du symbole d'accueil principal.
IGNOREEOF
Cette variable contrôle le comportement du shell lorsqu'il reçoit un caractère EOF (fin de fichier) comme unique entrée. Si elle configurée, la valeur de cette variable correspond au nombre de caractères EOF consécutifs apparaissant en début de ligne que bash ignorera avant de se terminer. Si cette variable existe mais que sa valeur n'est pas numérique, ou si elle n'a pas de valeur, bash accepte par défaut 10 EOF consécutifs avant de se terminer. Si elle n'existe pas, EOF est considéré comme un terminateur de saisie pour le shell.
TMOUT
Si cette variable contient une valeur supérieure a zéro, celle-ci est considérée comme un délai en secondes, à partir de l'affichage du symbole d'accueil principal. Lorsque ce délai sera écoulé, Bash se terminera si aucune saisie n'a eu lieu.
FCEDIT
L'éditeur par défaut utilisé par la commande interne fc.
FIGNORE
Une liste de suffixes, séparés par des deux-points `:', que bash ignorera lors de la complétion des noms de fichiers (voir le paragraphe READLINE plus bas). Un nom de fichier dont le suffixe correspond à l'un de ceux mentionnés dans FIGNORE est exclus de la liste des fichiers. Par exemple, cette variable peut prendre la valeur ``.o:~''.
GLOBIGNORE
Une liste de motifs séparés par des deux-points, définissant la liste des noms de fichiers à ignorer lors du développement des chemins. Si un nom de fichier correspondant à un motif d'expansion, correspond également à un motif dans GLOBIGNORE, il est supprimé de la liste des correspondances.
INPUTRC
Le nom du fichier de configuration de readline prioritaire sur le fichier par défaut ~/.inputrc (voir READLINE plus bas).
HISTCONTROL
Si cette variable contient la valeur ignorespace, les lignes commençant par un caractère d'espacement ne seront par mémorisées dans l'historique. Si elle contient la valeur ignoredups, une ligne correspondant exactement à la ligne de commande précédente ne sera pas dupliquée dans l'historique. La valeur ignoreboth permet de combiner ces deux comportements. Si la variable est détruite (commande unset), ou si elle contient une valeur différente des trois mentionnées ci-dessus, tous les lignes lues par l'interpréteur seront mémorisées dans la liste d'historique, sous contrôle de HISTIGNORE. Le fonctionnement de cette variable est surchargé par HISTIGNORE. La seconde ligne et les suivantes d'une commande multiligne ne sont pas testées, et sont ajoutées dans l'historique quelque soit la valeur de HISTCONTROL.
HISTIGNORE
Une liste de motifs séparés par des deux-points déterminant quelles lignes de commandes seront ajoutées à l'historique. Chaque motif est accroché au début de la ligne et doit lui correspondre en entier (il n'y a pas d'ajout de `*' implicite). Chaque motif est comparé à chaque ligne après que les vérifications de HISTCONTROL aient été appliquées. En plus des motifs génériques normaux du shell, `&' correspond à la ligne précédente de l'historique. `&' peut être protégé par un anti-slash. Ce dernier est éliminé avant de tenter une comparaison. La seconde ligne et les suivantes d'une commande multiligne ne sont pas testées, et sont ajoutées dans l'historique quelque soit la valeur de HISTIGNORE.
histchars
Cette variable contient deux ou trois caractères contrôlant le développement de l'historique, et le découpage en jetons (voir DÉVELOPPEMENT DE L'HISTORIQUE plus bas). Le premier caractère est le caractère de développement de l'historique, c'est à dire celui qui indique le début d'un développement d'historique (normalement `!'). Le second caractère est celui de substitution rapide, utilisé comme raccourci pour relancer la commande précédente, en modifiant une partie de la chaîne. Par défaut il s'agit de `^'. L'éventuel troisième caractère est celui qui indique, lorsqu'on le trouve en début de mot que le reste de la ligne est un commentaire. Normalement on utilise le caractère `#'. Ce caractère de commentaire empêche l'expansion de l'historique pour tous les mots restants sur la ligne. En revanche, il ne s'agit pas obligatoirement du caractère de commentaire pour l'interpréteur.
HOSTFILE
Contient le nom d'un fichier ayant le même format que /etc/hosts qui sera consulté lorsque le shell devra compléter un nom d'hôte. Ce fichier peut être changé de manière interactive. Lors de la prochaine tentative pour compléter un nom d'hôte, bash ajoutera le nouveau fichier à sa base de données déjà existantes.
auto_resume
Cette variable configure le comportement du shell interactif vis-à-vis de l'utilisateur et du contrôle de jobs. Si cette variable existe, les commandes simples constituées d'un seul mot sont considérées comme de possibles relances de travaux arrêtés. Aucune ambiguïté n'est possible, si plusieurs travaux arrêtés commencent par la chaîne saisie, bash sélectionne le job manipulé le plus récemment. Le nom du job arrêté correspond, dans ce contexte, à la ligne de commande utilisée pour le lancer. Si cette variable contient la valeur exact, la chaîne fournie doit correspondre exactement au nom d'un job arrêté. Si elle contient la valeur substring, la chaîne fournie doit correspondre à une sous-chaîne du nom du job arrêté. La valeur substring fournit un comportement analogue au job id %? (voir CONTRÔLE DES JOBS
 plus bas). Si la variable contient n'importe quelle autre valeur, la chaîne fournie doit correspondre à un préfixe du nom d'un job arrêté. C'est analogue au fonctionnement du job id %.

Tableaux

Bash propose des variables tableaux à une dimension. N'importe quelle variable peut être utilisée comme tableau ; la commande interne declare peut servir à déclarer explicitement un tableau. Il n'y a pas de limite maximale à la taille d'un tableau, ni d'obligation que les membres soient indexés ou assignés de manière contigûe. Les tableaux sont indexés par des entiers en commençant à zéro.
Un tableau est créé automatiquement si une variable est remplie en utilisant la syntaxe nom[index]=valeur. l'index est traîté comme une expression arithmétique, et s'évaluer en un nombre positif ou nul. Pour déclarer explicitement un tableau, on utilise declare -a nom (voir COMMANDES INTERNES DU SHELL plus bas). declare -a nom[index] est aussi accepté bien que l'index soit ignoré. Des attributs peuvent être spécifié pour une variable tableau en utilisant les commandes internes declare et readonly. Les attributs s'appliquent à tous les membres du tableau.
Les tableaux sont remplis en utilisant l'affectation composée de la forme nom=(valeur_1 ... valeur_n), où chaque valeur est de la forme [index]=chaîne. Seule la chaîne est obligatoire. Si les crochets et les index optionnels sont fournis, les affectations ont lieu en conséquence ; sinon le rang de l'elément rempli est le dernier rang rempli plus un. Les index commencent à zéro. Cette syntaxed est aussi acceptée par la commande interne declare. Les éléments individuels du tableaux sont remplis en utilisant la syntaxe nom[index]=valeur présentée plus haut.
Chaque élément d'un tableau peut référencé en utilisant la notation ${nom[index]}. Les accolades sont indispensables pour éviter les conflits avec le développement des noms de fichiers. Si index est @ ou *, le développement donne tous les membres de nom. Ces deux index diffèrent lorsqu'ils sont employés entre guillemets. Dans ce cas, ${nom[*]} correspond à un seul mot contenant les valeurs de tous les membres séparés par le premier caractère de la variable spéciale IFS, et ${nom[@]} développe chaque membre de nom en un mot distinct. Quant il n'y a pas de membre dans le tableau, ${nom[@]} n'a pas de valeur. Le comportement est analogue à celui des paramètres spéciaux * et @ (voir Paramètres spéciaux plus haut). ${#nom[index]} donne la longueur du membre ${nom[index]}. Si l'index est * ou @, le développement donne le nombre d'éléments dans le tableau. Référencer une variable sans index est équivalent à en référencer l'élément zéro.
La commande interne unset sert à détruire les tableaux. unset nom[index] détruit l'élément de rang index. unset nom, où nom est un tableau, ou unset nom[index], avec index valant * ou @ supprimer le tableau entier.
Les commandes internes declare, local, et readonly acceptent toutes une option -a pour spécifier un tableau. La commande interne read accepte une option -a pour remplir un tableau avec une liste de mots lus depuis l'entrée standard. Les commandes internes set et declare affiche les valeurs des tableaux d'une manière permettant de les réutiliser pour les affectations.

EXPANSION

Les expansions sont appliquées à la ligne de commande après qu'elle ait été divisée en mots. Il existe sept types de développements : expansion des accolades, développement du tilde, remplacement des paramètres et variables, substitution de commandes, évaluation arithmétique, découpage des mots, et développement des noms de fichiers.
L'ordre est : expansion des accolades, du tilde, des paramètres, des variables, des commandes, évaluation arithmétique (selon la méthode gauche-à-droite), découpage des mots et développement des noms de fichiers.
Sur les systèmes qui le supportent, un développement supplémentaire a lieu : la substitution de processus.
Seuls l'expansion des accolades, le découpage des mots, et le développement des noms de fichiers peuvent modifier le nombre de mots. Les autres développement transforment un mot unique en un autre mot unique. La seule exception à cette règle est l'expansion de "$@" et "${nom[@]}" comme on l'a vu plus haut (voir le paragraphe PARAMÈTRES).

Expansion des accolades


L'expansion des accolades est un mécanisme permettant la création de chaînes quelconques. Il est similaire au développement des noms de fichiers, mais les noms de fichiers créés n'existent pas nécessairement. Les motifs qui seront développes prennent la forme d'un préambule facultatif, suivi d'une série de chaînes séparées par des virgules, encadrée par des accolades. Un postambule peut éventuellement suivre la série de chaînes. Le préambule est inséré devant chacune des chaînes contenues entre les accolades, et le postambule est ajouté à 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ées, l'ordre gauche à droite est conservé. Par exemple a{d,c,b}e se développe en `ade ace abe'.
L'expansion des accolades est effectuée en premier, et tous les caractères ayant une signification spéciale pour les autres développement sont conservés dans le résultat. Il s'agit d'une modification purement littérale. Bash n'effectue aucune interprétation syntaxique du texte entre les accolades.
Une formule correcte pour le développement doit contenir des accolades ouvrantes et fermantes non protégées, et au moins une virgule non protégée. Toute formule incorrecte n'est pas développée et reste inchangée. Un { ou un , peuvent être protégés par un anti-slash pour éviter d'être considérés comme partie d'une expression entre accolades.
Cette construction est généralement utilisée comme raccourci lorsque le préfixe commun aux différentes chaînes est relativement long :

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 traditionnelles de l'interpréteur Bourne sh. sh n'effectue aucun traitement sur les accolades ouvrantes et fermantes lorsqu'elles apparaissent dans un mot, et les laisse inchangées. Bash supprime les accolades dans les mots, après développement. Par exemple si l'on fournit à sh le mot file{1,2}, il reste inchangé en sortie. Par contre, il est transformé en file1 file2 par bash. Si une compatibilité stricte avec sh est nécessaire, lancez bash avec l'option +B ou désactivez le développement des accolades avec l'option +B de la commande set (voir le paragraphe COMMANDES INTERNES DU SHELL plus bas).

Développement du Tilde


Si un mot commence avec le caractère tilde (`~'), tous les caractères précédant le premier slash non protégé (voire tous les caractères s'il n'y a pas de slash), 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 nom de login possible. Si ce nom de login est une chaîne nulle, le tilde est remplacé par la valeur du paramètre HOME. Si HOME n'existe pas, le tilde est remplacé par le répertoire de connexion de l'utilisateur exécutant le shell. Si le préfixe tilde est remplacé par le répertoire personnel associé au nom de login en question.
Si le préfixe tilde est `+', la valeur du paramètre shell PWD le remplace. Si le préfixe tilde est `-', la valeur du paramètre shell OLDPWD lui est substitué. Si les caractères à la suite du tilde dans le préfixe tilde représentent un nombre N préfixé éventuellement d'un `+' ou d'un `-' le préfixe tilde est remplacé par l'élément correspondant de la pile de répertoires telle qu'il serait affiché par la commande interne dirs invoquée avec le préfixe tilde en argument. Si les caractères à la suite du tilde dans le préfixe tilde représentent un nombre sans signe, on suppose qu'il s'agit de `+'.
Si le nom est invalide, ou si le développement du tilde échoue, le mot est inchangé.
Chaque affectation de variable est soumis au développement du tilde s'il suit immédiatement un : ou un =. On peut donc utiliser des chemins d'accès avec un tilde pour remplir les variables PATH, MAILPATH, et CDPATH, et le shell fournira la valeur correcte.

Remplacement des paramètres


Le caractère `$' permet d'introduire le remplacement des paramètres, la substitution de commandes, ou l'expansion arithmétique. Le nom du paramètre ou du symbole à développer peut être encadré par des accolades, afin d'éviter que les caractères suivants ne soient considérés comme appartenant au nom de la variable.
Lorsque les accolades sont utilisées, l'accolade finale est le premier caractère `}' non protégé par un antislash ni inclus dans une chaîne protégé, ni dans une expresssion arithmétique, une substitution de commande ou un développement de paramètre.
${paramètre}
est remplacé par la valeur du paramètre. Les accolades sont nécessaire quand le paramètre est un paramètre positionnel ayant plusieurs chiffres, ou si le paramètre est suivi de caractères n'appartenant pas à son nom.

Si le premier caractère du paramètre est un point d'exclamation, un niveau d'indirection de variable est introduit. Bash utilise la valeur de la variable formée par le reste du paramètre comme un nom de variable. Cette variable est alors développée et la valeur utilisée pour le reste de la substitution plutôt que la valeur du paramètre lui-même. On appelle ce mécanisme le développement indirect.
Dans chacun des exemples suivants, le mot est soumis au développement du tilde, au remplacement des paramètres, à la substitution de commandes, et à l'évaluation arithmétique. Bash vérifie si un paramètre existe, et s'il n'est pas nul. L'omission du double point ne fournit qu'un test d'existence.
${paramètre:-mot}
Utilisation d'une valeur par défaut. Si le paramètre est inexistant ou nul, on substitue le développement du mot. Sinon, c'est la valeur du paramètre qui est fournie.
${paramètre:=mot}
Attribution d'une valeur par défaut. Si le paramètre est inexistant ou nul, le développement du mot lui est affecté. La valeur du paramètre est alors renvoyée. Les paramètres positionnels, et spéciaux ne peuvent pas être affectés de cette façon.
${paramètre:?mot}
Affichage d'une erreur si inexistant ou nul. Si le paramètre est inexistant, ou nul, le développement du mot (ou un message approprié si aucun mot n'est fourni) est affiché sur la sortie d'erreur standard, et l'interpréteur se termine, s'il n'est pas interactif. Autrement, la valeur du paramètre est utilisée.
${paramètre:+mot}
Utilisation d'une valeur différente. Si le paramètre est nul, ou inexistant, rien n'est substitué. Sinon le développement du mot est renvoyé.
${paramètre:début}
${paramètre:début:longueur}
Extraction de sous-chaîne Se développe pour fournir la sous-chaîne de la longueur indiquée (en caractères) commençant au début.D offset. Si la longueur est omise, fournit la sous-chaîne commençant au caractère de début et s'étendant jusqu'à la fin du paramètre. La longueur et le début sont des expressions arithmétiques (voir ÉVALUATION ARITHMÉTIQUE plus bas). La longueur doit être positive ou nulle. Si le début est négatif, sa valeur est considérée à partir de la fin du contenu du paramètre. Si le paramètre est @, le résultat correspond aux longueur paramètres positionnels commençant au début. Si le paramètre est un nom de tableau indexé par @ ou *, le résultat est les longueur membres du tableau commençant à ${paramètre[début]}. L'indexation des sous-chaînes débute à zéro, sauf pour les paramètres positionnels qui débute en 1.
${#paramètre}
Est remplacé par la longueur, en caractères, de la valeur du paramètre. Si le paramètre est * ou @, la valeur est le nombre de paramètres positionnels. Si le paramètre est un nom de tableau indexé par * ou @, la valeur est le nombre d'éléments dans le tableau.
${paramètre#mot}
${paramètre##mot}
Le mot est développé pour fournir un motif, comme dans l'expansion des noms de fichiers. Si le motif correspond au début de la valeur du paramètre, alors le développement prend la valeur du paramètre après suppression du plus petit motif commun (cas ``#''), ou du plus long motif (cas ``##''). Si le paramètre est @ ou *, l'opération de suppression de motif est appliquée à chaque paramètre positionnel successivement, et le développement donne la liste finale. Si le paramètre est une variable tableau indexée par @ ou *, l'opération de suppression de motif est appliquée à chaque membre du tableau successivement, et le développement donne la liste finale.
${paramètre%mot}
${paramètre%%mot}
est développé pour fournir un motif, comme dans l'expansion des noms de fichiers. Si le motif correspond à une portion finale de la valeur du paramètre, alors le développement prend la valeur du paramètre après suppression du plus petit motif commun (cas ``%''), ou du plus long motif (cas ``%%''). Si le paramètre est @ ou *, l'opération de suppression de motif est appliquée à chaque paramètre positionnel successivement, et le développement donne la liste finale. Si le paramètre est une variable tableau indexée par @ ou *, l'opération de suppression de motif est appliquée à chaque membre du tableau successivement, et le développement donne la liste finale.
${paramètre/motif/chaîne}
${paramètre//motif/chaîne}
Le motif est développé comme dans le traitement des noms de fichiers. Le paramètre est développé et la plus longue portion correspondant au motif est remplacée par la chaîneg. Dans la première forme, seule la première correspondance est remplacée, dans la seconde toutes les portions correspondant au motif sont remplacées par la chaîne. Si le motif commence par #, il doit correspondre au début de la valeur développée du paramètre. Si le motif commence par %, il doit correspondre à la fin du développement du paramètre. Si la chaîne est nulle, les portions correspondant au motif sont supprimées et le / après le motif peut être omis. Si le paramètre est @ ou *, l'opération de substitution est appliquée à chacun des paramètres positionnels successivement, et le résultat est la liste finale. Si le paramètre est une variable tableau indexée par @ ou *, l'opération de substitution s'applique à chaque membre du tableau successivement, et le résultat est la liste finale.

Substitution de commandes


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

$(commande)
ou
`commande`

Bash effectue la substitution en exécutant la commande et en la remplaçant par sa sortie standard, dont les derniers sauts de lignes sont supprimés. Les sauts de lignes internes ne sont pas supprimés mais peuvent disparaître lors du découpage en mots. La substitution de commande $(cat fichier) peut être remplacée par l'équivalent plus rapide $(< fichier).
Quand l'ancienne forme de substitution avec les backquotes ` est utilisée, le caractère antislash garde sa signification littérale, sauf s'il est suivi de $, `, ou \. La première backquote non protégée par un antislash termine la substitution de commande. Quand on utilise la forme $(commande), tous les caractères entre parenthèses gardent leurs valeurs littérales. Aucun n'est traité spécialement.
Les substitutions de commandes peuvent être imbriquées. Avec l'ancienne forme, il faut protéger les backquotes internes avec un backslash.
Si la substitution apparaît entre guillemets, le découpage des mots, et l'expansion des noms de fichiers ne sont pas effectués.

Évaluation Arithmétique


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

$((expression))

L'expression est manipulée de la même manière que si elle se trouvait entre guillemets, mais un guillemet se trouvant entre les parenthèses n'est pas traité spécifiquement. Tous les mots de l'expression subissent le développement des paramètres, la substitution des commandes et la suppression des apostrophes et guillemets. Les évaluations arithmétiques peuvent être imbriquées.
L'évaluation est effectuée en suivant les règles mentionnées dans le paragraphe CALCULARITHMÉTIQUE. Si l'expression est invalide, bash affiche un message indiquant l'erreur, et aucune substitution n'a lieu.

Substitution de Processus


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

Séparation des mots


Les résultats du remplacement des paramètres, de la substitution de commandes, et de l'évaluation arithmétique, qui ne se trouvent pas entre guillemets sont analysés par le shell afin d'appliquer le découpage des mots.
L'interpréteur considère chaque caractère du paramètre IFS comme un délimiteur, et redécoupe le résultat des transformations précédentes en fonction de ceux-ci. Si la valeur du paramètre IFS est exactement <espace><tabulation><retour-chariot>, (la valeur par défaut), alors toute séquence de caractères IFS sert à délimiter les mots. Si IFS a une valeur autre que celle par défaut, alors les séquences de caractères blancs espace et tabulation sont ignorées en début et fin de mot, à condition que ces caractères blancs se trouvent dans la valeur de IFS (un caractère de IFS blanc). Tout autre caractère de IFS se trouvant à côté d'un caractère blanc de IFS, sert à délimiter un champ. Une séquence de caractères blancs de IFS est également traitée comme un séparateur. Si la valeur de IFS est nulle, aucun découpage de mot n'a lieu.
Les arguments nuls explicites ("" ou '') sont conservés. Les arguments nuls implicites, résultant du développement des paramètres n'ayant pas de valeurs, sont éliminés. Si un paramètre sans valeur est développé entre guillemets, le résultat est un argument nul qui est conservé.
Notez que si aucun développement n'a lieu, le découpage des mots n'est pas effectué.

Développement des noms de fichiers


Après le découpage des mots, et si l'option -f n'est pas indiquée, bash recherche dans chaque mot les caractères *, ?, (, et [. Si l'un d'eux apparaît, le mot est considéré comme un motif, et remplacé par une liste, classée par ordre alphabétique, des noms de fichiers correspondant à ce motif. Si aucun nom de fichiers ne correspond, et si l'option shell nullglob n'est pas active, le mot reste inchangé. Si l'option nullglob est active, et si aucune correspondance n'est trouvée, le mot est supprimé. Si l'option shell nocaseglob est activée, la correspondance a lieu sans tenir compte des différences majuscules / minuscules. Quand un motif est utilisé pour créer des chemins d'accès, le caractère ``.'' au début d'un nom, ou immédiatement à la suite d'un slash doit être explicitement mis en correspondance, à moins que l'option shell dotglob ne soit active. Le caractère slash doit toujours être mis en correspondance explicitement. Dans tous les autres cas, le caractère ``.'' n'est pas traité spécifiquement. Voyez la description de la commande shopt dans COMMANDES INTERNES DU SHELL pour une description des options shell nocaseglob, nullglob, et dotglob.
la variable shell GLOBIGNORE peut servir à restreindre l'ensemble des noms de fichiers correspondant à un motif. Si GLOBIGNORE est remplie, chaque nom de fichier qui correspond aussi à un motif de GLOBIGNORE est supprimé de la liste des correspondances. Les noms de fichiers ``.'' et ``..'' sont toujours ignorés, même quand GLOBIGNORE est remplie. Toutefois, configurer GLOBIGNORE a pour effet d'activer l'option shell dotglob, ainsi tous les autres noms de fichiers commençant par ``.'' correspondront. Pour obtenir l'ancien comportement ignorant les noms commençant par ``.'', placez ``.*'' dans l'un des motifs de GLOBIGNORE. L'option dotglob est désactivée si la variable GLOBIGNORE n'existe pas.
Motifs génériques
Tout caractère apparaissant dans un motif, hormis les caractères spéciaux décrits ci-après correspond à lui-même. Le caractère NUL ne peut pas se trouver dans un motif. Les caractères spéciaux doivent être protégés si ils doivent se correspondre littéralement.
Les caractères spéciaux ont les significations suivantes :
*
Correspond à n'importe quelle chaîne, y compris la chaîne vide.
?
Correspond à n'importe quel caractère.
[...]
Correspond à l'un des caractères entre crochets. Une paire de caractères séparés par un signe "moins" indique un intervalle; qui correspond à n'importe quel caractère situé entre les deux bornes incluses. Si le premier caractère suivant le [ est un ! ou un ^ alors la correspondance se fait sur les caractères non-inclus. Un - peut être mis en correspondance en l'incluant en premier ou dernier caractère de l'ensemble. Un ] peut être mis en correspondance en l'incluant en premier caractère de l'ensemble.

Entre [ et ], on peut indiquer une classe de caractère en utilisant la syntaxe [:classe:], où classe est l'une des classes suivantes, définies dans le standard POSIX.2 :

alnum alpha ascii blank cntrl digit graph lower print punct space upper xdigit
Une classe correspond à un caractère quelconque qui s'y trouve.

Entre [ et ], on peut indiquer une classe d'équivalence en utilisant la syntaxe [=c=], qui correspond à n'importe quel caractère ayant le même ordre (comme indiqué dans la localisation en cours) que le caractère c.

Entre [ et ], la syntaxe [.symbole.] correspond au symbole de classement symbole.

Si l'option extglob du shell option est activée par la commande shopt plusieurs opérateurs de correspondance étendue sont reconnus. Dans la description suivante, une liste-motif 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-motif)
Correspond à zéro ou une occurrence des motifs indiqués
*(liste-motif)
Correspond à zéro ou plusieurs occurrences des motifs indiqués
+(liste-motif)
Correspond à une ou plusieurs occurrences des motifs indiqués
@(liste-motif)
Correspond à une occurrence exactement des motifs indiqués
!(liste-motif)
Correspond à tout sauf les motifs indiqués

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 développement sont supprimées.

REDIRECTION

Avant qu'une commande ne soit exécutée, il est possible de rediriger son entrée et sa sortie en utilisant une notation spéciale interprétée par le shell. Les redirections peuvent également servir à ouvrir ou fermer des fichiers dans l'environnement actuel du shell. Les opérateurs de redirection décrits ci-dessous peuvent apparaître avant, ou au sein d'une commande simple ou suivre une commande. Les redirections sont traitées dans l'ordre d'apparition de gauche à droite.
Dans les descriptions suivantes, si le numéro de descripteur de fichier est omis, et si le premier caractère de l'opérateur de redirection est <, celui-ci correspondra à l'entrée standard (descripteur de fichier 0). Si le premier caractère de l'opérateur est >, la redirection s'appliquera à la sortie standard (descripteur de fichier 1).
Le mot qui suit l'opérateur de redirection dans les descriptions suivantes est soumis à l'expansion des accolades, du tilde, des paramètres, à la substitution de commandes, à l'évaluation arithmétique, à la suppression des protections, et au développement des noms de fichiers. S'il se modifie pour donner plusieurs mots, bash détectera une erreur.
Remarquez que l'ordre des redirections est important. Par exemple, la commande

ls > liste_répertoires 2>&1

redirige a la fois la sortie standard et la sortie d'erreur 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 a été renvoyée vers la sortie standard avant que celle-ci ne soit redirigée vers liste_répertoires.
Une erreur d'ouverture ou de création de fichier peut déclencher un échec.

Redirection d'entrée


Lorsque l'on applique une redirection d'entrée, le fichier dont le nom résulte du développement du mot sera ouvert en lecture avec le descripteur de fichier numéro n, ou en tant qu'entrée standard (descripteur de fichier 0) si n n'est pas mentionné.
Le format général des redirections d'entrée est le suivant :

[n]<mot

Redirection de sortie


Lors d'une redirection de sortie, le fichier dont le nom résulte du développement du mot est ouvert en écriture, avec le descripteur de fichier n, ou en tant que sortie standard (descripteur de fichier 1) si n n'est pas mentionné. Si le fichier n'existe pas, il est créé. S'il existait déjà, sa taille est ramenée à 0.
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 échouera si le fichier dont le nom résulte du développement du mot existe et est un fichier régulier. Si l'opérateur de redirection est >|, ou l'opérateur > avec l'option noclobber de la commande interne set n'est pas activée, la redirection sera tentée même si le fichier dont le nom résulte du développement du mot existe.

Redirection pour Ajout en Sortie


Lorsqu'on redirige ainsi la sortie, le fichier dont le nom résulte du développement du mot est ouvert pour ajout en fin de fichier, avec le descripteur n, ou en tant que sortie standard (descripteur 1) si n n'est pas mentionné. Si le fichier n'existe pas, il est créé.
Le format général pour la redirection de sortie avec ajout est :

[n]>>mot

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


Bash permet la redirection simultanée de la sortie standard (descripteur 1) et de la sortie d'erreur (descripteur 2), dans un fichier dont le nom est le résultat du développement du mot avec cette construction.
Il y a deux formes pour effectuer cette double redirection :

&>mot
et
>&mot

On préfère généralement la première. Elle est sémantiquement équivalente à

>mot 2>&1

Document en ligne


Avec ce type de redirection, le shell va lire son entrée standard jusqu'à ce qu'il atteigne une ligne contenant uniquement le mot prévu (sans espaces à la suite), nommée étiquette. Une fois cette étiquette atteinte, il exécutera la commande demandée en lui fournissant en entrée le texte lu avant l'étiquette, que l'on appelle document en ligne.
Le format des documents en ligne est le suivant :

<<[-]mot
        document en ligne
étiquette

Il n'y a ni remplacement de paramètre, ni substitution de commande, ni développement de chemin d'accès, ni évaluation arithmétique sur le mot. Si l'un des caractères du mot est protégé, l' étiquette est obtenue après suppression des protections dans le mot, et les lignes du document ne sont pas développées. Sinon, toutes les lignes du document sont soumises au remplacement des paramètres, à la substitution de commandes, et à l'évaluation arithmétique. Dans ce dernier cas, les couples \<retour-chariot> sont ignorés, et \ doit être utilisé pour protéger les caractères \, $, et `.
Si l'opérateur de redirection est <<-, alors les tabulations en tête de chaque ligne sont supprimées, y compris dans la ligne contenant étiquette. Ceci permet d'indenter de manière naturelle les documents en ligne au sein des scripts.

Dédoublement de descripteur de fichier


L'opérateur de redirection

[n]<&mot

permet de dupliquer les descripteurs de fichiers en entrée. Si le mot se transforme en un ou plusieurs chiffres, le descripteur de fichier n devient une copie de ce descripteur. Si les chiffres du mot ne correspondent pas à un descripteur en lecture, une erreur se produit. Si le mot prend la forme -, le descripteur n est fermé. Si n n'est pas mentionné, on utilise l'entrée standard (descripteur 0).
L'opérateur

[n]>&mot

est utilisé de manière similaire pour dupliquer les descripteurs de sortie. Si n n'est pas précisé, on considère la sortie standard (descripteur 1). Si les chiffres du mot ne correspondent pas à un descripteur en écriture, une erreur se produit. Un cas particulier se produit si n est omis, et si mot ne se développe pas sous forme de chiffres. Alors, les sorties standard et d'erreurs sont toutes deux redirigées comme précédemment.

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 lorsqu'il est utilisé comme premier mot d'une commande simple. L'interpréteur gère une liste d'alias qui peuvent être créés et détruits avec les commandes internes alias et unalias (voir le paragraphe COMMANDES INTERNES DU SHELL plus bas). Le shell vérifie si le premier mot de chaque commande (s'il n'est pas protégé) est un alias. Si tel est le cas, ce mot est remplacé par le texte de l'alias. Le nom de l'alias, ainsi que le texte de remplacement, peuvent contenir n'importe quels caractères valides pour le shell, y compris les méta-caractères présentés plus haut. Une exception toutefois, le nom de l'alias ne peut pas contenir de caractère =. Le shell vérifie si le premier mot du texte de remplacement est à son tour le nom d'un alias, mais s'il est identique au nom de l'alias il ne sera pas remplacé à nouveau. Ceci permet de créer un alias ls valant ls -F, par exemeple, que bash n'essaiera pas de développer récursivement. Si le dernier caractère du texte de remplacement est un blanc, alors on vérifiera également si le mot suivant l'alias est lui aussi un 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. Si on en a besoin, il faut utiliser une fonction du shell.
Les alias ne sont développés qu'avec les shells interactifs sauf si l'option expand_aliases du shell est activée par la commande shopt (voir la description de shopt au paragraphe COMMANDES INTERNES DU SHELL plus bas)
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 avant d'exécuter une commande de cette ligne. Les alias sont traité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 la lecture de la prochaine ligne d'entrée. Autrement dit, une commande placée à la suite d'une définition d'alias, sur la même ligne ne sera pas affectée par cet alias. Ce comportement est également important lors de l'exécution des fonctions. Les alias sont traités lorsque la définition de la fonction est lue, et non pas lors de l'exécution de cette fonction. Ainsi des alias définis dans une fonction ne sont pas actifs 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.
Notez enfin que la plupart du temps les alias sont avantageusement remplacés par des fonctions du shell.

FONCTIONS

Une fonction du shell mémorise une série de commandes pour permettre une exécution ultérieure. Leurs definition est décrite plus haut, dans GRAMMAIREDUSHELL. Les fonctions sont exécutées dans le contexte de l'interpréteur en cours. On ne crée pas de nouveau processus pour interpréter une fonction, contrairement à l'exécution d'un script. Les arguments d'une fonction sont placés dans les paramètres positionnels durant son exécution. Le paramètre spécial # est mis a jour. Le paramètre positionnel 0 n'est pas modifié. Les autres aspects de l'environnement d'exécution du shell sont identiques entre l'intérieur de la fonction et le corps appelant du programme, à l'exception de la gestion de DEBUG (voir la description de la commande interne trap au paragraphe SHELL BUILTIN COMMANDS plus bas) qui n'est pas héritée.
Les variables locales d'une fonction peuvent être déclarées avec la commande local. Autrement, les variables et leurs valeurs sont partagées entre la fonction et son appelant.
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. Quand une fonction se termine, les paramètres positionnels et le paramètre spécial # reprennent les valeurs qu'ils avaient avant l'appel de fonction.
Les noms des fonctions et leurs définitions sont affichés avec l'option -f des commandes internes declare ou typeset. Les options -F de declare ou typeset n'afficheront que les noms des fonctions. Les fonctions peuvent être exportées automatiquement avec l'option -f de la commande interne export, afin de rester définies dans les sous-shells.
Les fonctions peuvent être récursives. Aucune limite n'est imposée quant au nombre d'appels récursifs.

CALCUL ARITHMÉTIQUE

Le shell permet, dans certaines circonstances, l'évaluation d'expressions arithmétiques (voir la commande interne let ainsi que le paragraphe Évaluation Arithmétique). L'évaluation est effectuée en utilisant des entiers longs, sans vérification du débordement. Néanmoins la division par 0 est détectée et renvoie une erreur. La liste des opérateurs ci-dessous est constituée par des groupes de précédence identique. Les niveaux sont classés en ordre de précédence décroissante.
- +
plus et moins unaire
! ~
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
expr?expr:expr
évaluation conditionnelle
= *= /= %= += -= <<= >>= &= ^= |=
assignations

On peut utiliser les variables du shell comme opérandes, le développement des paramètres étant effectué avant l'évaluation arithmétique. Les valeurs des paramètres sont converties en entiers longs dans les expressions. Une variable shell n'a donc pas besoin d'avoir l'attribut "entier" pour être utilisable dans un calcul.
Les constantes commençant par un 0 sont interprétées comme des nombres octaux. Un entête 0x ou 0X indique une valeur hexadécimale. Sinon, les nombres ont la forme [base#]n, ou la base arithmétique est un nombre décimal entre 2 et 36, et n le nombre lui-même exprimé dans cette base. Si la base n'est pas mentionnée, le nombre est considéré comme décimal. Les chiffre supérieurs à 9 sont représentés par les lettres minuscules, les lettres majuscules, le _ et le @, dans cet ordre. Si la base est inférieure ou égale à 36 les minuscules et les majuscules peuvent être utilisées de manière interchangeable pour représenter les nombres entre 10 et 35.
Les opérateurs sont évalués dans l'ordre de précédence. Les sous-expressions entre parenthèses sont évaluées en premier, ce qui permet de surpasser les règles de précédence.

EXPRESSIONS CONDITIONNELLES

Les expressions conditionnelles sont utilisées par la commande composée [[ et les commandes internes test et [ pour vérifier l'état d'un fichier et assurer des comparaisons arithmétiques ou sur des chaînes. Les expressions se forment à partir des opérateurs unaires ou binaires suivants. Si un argument fichier est de la forme /dev/fd/n, alors il représente le descritpeur de fichier n.
-a fichier
Vrai si le fichier existe.
-b fichier
Vrai si le fichier existe et est un fichier spécial bloc.
-c fichier
Vrai si le fichier existe et est un fichier spécial caractère.
-d fichier
Vrai si le fichier existe et est un répertoire
-e fichier
Vrai si le fichier existe.
-f fichier
Vrai si le fichier existe et est un fichier régulier.
-g fichier
Vrai si le fichier existe et a son bit Set-GID positionné.
-h fichier
Vrai si le fichier existe et est un lien symbolique.
-k fichier
Vrai si le fichier existe et a son bit ``sticky'' positionné.
-p fichier
Vrai si le fichier existe et est un tube nommé (FIFO).
-r fichier
Vrai si le fichier existe et est accessible en lecture.
-s fichier
Vrai si le fichier existe et a une taille non nulle.
-t fd
Vrai si fd est ouvert sur un terminal.
-u fichier
Vrai si le fichier existe et a son bit Set-UID positionné.
-w fichier
Vrai si le fichier existe et est accessible en écriture.
-x fichier
Vrai si le fichier existe et est exécutable.
-O fichier
Vrai si le fichier existe et appartient à l'ID effectif de l'utilisateur.
-G fichier
Vrai si le fichier existe et appartient au groupe effectif de l'utilisateur.
-L fichier
Vrai si le fichier existe et est un lien symbolique.
-S fichier
Vrai si le fichier existe et est une socket
-N fichier
Vrai si le fichier existe et a été modifié depuis sa dernière lecture.
fichier_1 -nt fichier_2
Vrai si le fichier_1 est plus récent que le fichier_2, d'après les dates de modification.
fichier_1 -ot fichier_2
Vrai si le fichier_1 est plus vieux que le fichier_2.
fichier_1 -ef fichier_2
Vrai si lefichier_1 et le fichier_2 sont sur le même périphérique et ont les mêmes numéros d'i-noeuds.
-o nom_opt
Vrai si l'option shell nom_opt est active. Cosulter la liste des options dans la description de l'argument -o de la commande interne set plus bas.
-z chaîne
Vrai si la longueur de la chaîne est nulle.
-n chaîne
chaîne
Vrai si la longueur de la chaîne est non-nulle.
chaîne_1 == chaîne_2
Vrai si les deux chaînes sont égales. Le symbole = peut servir à remplacer ==
chaîne_1 != chaîne_2
Vrai si les deux chaînes sont différentes.
chaîne_1 < chaîne_2
Vrai si chaîne_1 se trouve avant chaîne_2 dans l'ordre lexicographique de la localisation en cours.
chaîne_1 > chaîne_2
Vrai si chaîne_1 se trouve après chaîne_2 dans l'ordre lexicographique de la localisation en cours.
arg1 OP arg2
OP est l'un des opérateurs suivants -eq, -ne, -lt, -le, -gt, ou -ge. Ces opérateurs arithmétiques binaires renvoient la valeur vraie si arg_1 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.

DÉVELOPPEMENT DES COMMANDES SIMPLES

Lors de l'exécution d'une commande simple, le shell effectue les développements affectations, et redirections de gauche à droite, suivants.
1.
Les mots que l'analyser a repéré comme affectation de variables (ceux qui précèdent le nom de la commande) et les redirections sont mémorisés pour une mise en place ultérieure.
2.
Les autres mots sont développés. S'il reste des mots après le développement, le premier est considéré comme le nom d'une commande et les suivants comme ses arguments.
3.
Les redirections sont mises en place, comme décrit plus-haut au paragraphe REDIRECTION.
4.
Le texte suivant le = dans chaque affectation est soumis au dévelopement du tilde, des paramètres, à la substitution de commande, à l'évaluation arithmétique et à la suppression des protection avant de remplir la variable.

Si aucun nom de commande ne résulte des précédentes opérations, les assignations de variable modifie l'environnement en cours. Sinon elles sont ajoutées à celui de la commande exécutée et ne modifient pas l'environnement du shell. Si l'une des tentatives d'affectation concerne une variable en lecture seule, une erreur se produit, et la commande se termine sur un code non-nul.
Si aucun nom de commande n'est obtenu, les redirections sont réalisées mais ne modifient pas l'environnement du shell en cours. Une erreur de redirection renvoie un code de retour non-nul.
S'il reste un nom de commande après l'expansion, l'exécution a lieu comme décrit ci-dessous. Sinon la commande se termine. Si l'un des développement contient une substitution de commande, le code de retour est celui de la dernière substitution de commande réalisée. S'il n'y en a pas, la commande se termine avec un code de retour nul.

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 éventuelle liste d'arguments, les actions suivantes sont effectuées.
Si le nom de la commande ne contient pas de slash, le shell tente de la trouver. S'il existe une fonction shell de ce nom, elle est appelée comme nous l'avons vu dans le paragraphe FONCTIONS plus haut. Si le nom n'est pas celui d'une fonction, l'interpréteur le recherche dans la liste des fonctions internes. Si une équivalence est trouvée, la fonction interne est invoquée.
Si le nom n'est ni celui d'une fonction shell, ni celui d'une commande interne, et s'il ne contient pas de slash, bash va chercher dans chacun des membres de PATH un répertoire contenant un fichier exécutable du nom désiré. Bash utilise une table de hachage pour mémoriser les noms d'accès complets des fichiers (voir la commande hash au paragraphe COMMANDES INTERNES DU SHELL plus bas). Une recherche complète dans les répertoires du PATH n'est entreprise que si la commande ne se trouve pas dans la table de hachage. Si la recherche est infructueuse, l'interpréteur affiche un message d'erreur et renvoie un code de retour valant 127.
Si la recherche réussit, ou si le nom de la commande contient au moins un slash, le shell exécute le programme voulu dans un environnement distinct. L'argument 0 est rempli avec le nom fourni, et les autres arguments seront éventuellement remplis avec le reste de la ligne de commande.
Si l'exécution échoue parce que le programme n'est pas un exécutable, et si le fichier n'est pas un répertoire, on le considère alors comme un script shell, un fichier contenant une série de commandes. Un sous-shell est alors créé pour exécuter ce script. Ce sous-shell se réinitialisera lui-même, comme si un nouveau shell avait été invoqué pour exécuter le script, à la différence qu'il continuera à mémoriser l'emplacement des commandes connues de son parent (voir hash dans le paragraphe COMMANDES INTERNES DU SHELL plus bas).
Si le programme est un fichier commençant par #!, le reste de la première ligne indique un interpréteur pour ce programme. Le shell se chargera d'exécuter cet interpréteur, si le système d'exploitation ne gère pas lui-même ce format d'exécutable. Les arguments de l'interpréteur consistent en un premier argument éventuel fourni sur la première ligne du fichier à la suite du nom de l'interpréteur, suivi du nom du programme, suivi des arguments de la commande s'il y en a.

ENVIRONNEMENT D'EXÉCUTION DES COMMANDES

Le shell fournit un environnement d'exécution consistant en l'ensemble des éléments suivants :
*
les fichiers ouverts hérités par le shell à son lancement, et modifiés par les redirections de la commande interne exec ;
*
le répertoire de travail configuré par cd, pushd, ou popd, ou hérité par le shell son démarrage ;
*
le masque de création de fichier fixé par umask ou hérité du père du shell ;
*
la gestion des signaux configurée avec trap ;
*
les paramètres du shemm fixés par des affectation de variables ou avec la commande interne set ou hérité de l'environnement du père du shell ;
*
les fonctions du shell définies lors de l'exécution ou héritées de l'environnement du père du shell ;
*
les options fournies au démarrage (par défaut ou sur la ligne de commandes) ou par la commande interne set ;
*
les options activées par la commande interne shopt ;
*
les alias du shell définies par la commande alias ;
*
les ID des divers processus, y compris ceux à l'arrière-plan, la valeur de $$, et la valeur de $PPID.

Lorsqu'une commande autre qu'une fonction interne ou une fonction du shell doit être exécutée, elle est invoqué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 du shell.
*
les fichier ouverts du shell, auxquels s'ajoutent les modification indiquées par le redirections apportées à la commande ;
*
le répertoire de travail en cours ;
*
le masque de création de fichiers ;
*
les variables du shell marquées pour l'exportation, ainsi que les variables exportées spécialement pour la commande ;
*
les signaux capturés par le shell reprennent le comportement hérité du père du shell, et les signaux ignorés par le shell restent ignorés.

Une commande invoquée dans un environnement distinct ne peut pas affecter l'environnement d'exécution du shell.
Les substitutions de commandes et les commandes asynchrones sont invoquées dans un environnement de sous-shell qui est une copie de celui du shell, sauf que les signaux capturés par le shell reprennent le comportement qu'ils avaient au lancement du shell. Les fonctions internes invoquées dans un pipeline sont aussi exécutées dans un environnement de sous-shell. Les modifications apportées à l'environnement d'un sous-shell n'affectent aucunement l'environnement du shell.

ENVIRONNEMENT

Quand un programme est invoqué, il reçoit un tableau de chaînes que l'on appelle environnement. Il s'agit d'une liste de paires nom-valeur, de la forme nom=valeur.
Le shell permet de manipuler l'environnement de plusieurs façons. Au démarrage, le shell analyse son propre environnement, et crée un paramètre pour chaque nom trouvé, en le marquant comme exportable vers les processus fils. Les commandes exécutées héritent de cet environnement. Les commandes export et declare -x permettent d'ajouter ou de supprimer des paramètres ou des fonctions de l'environnement. Si la valeur d'un paramètre de l'environnement est modifiée, la nouvelle valeur devient une partie de l'environnement, et elle remplace l'ancienne. L'environnement hérité par les commandes exécutées est l'environnement initial du shell (dont les valeurs peuvent être modifiées), moins les éléments supprimés par la commande unset, plus les éléments ajoutés par les commandes export et declare -x.
L'environnement d'une commande simple ou d'une fonction peut être augmenté temporairement en la faisant précéder d'une affectation de paramètre, comme nous l'avons vu au paragraphe PARAMÈTRES. Ces affectations ne concernent que l'environnement vu par cette commande ou fonction.
Si l'option -k est utilisée (voir la commande interne set plus bas), alors toutes les affectations de paramètres sont placées dans l'environnement d'une commande exécutée, pas seulement celles qui précèdent son nom.
Quand bash invoque une commande externe, la variable _ contient le chemin d'accès complet à cette commande, et elle est transmise dans l'environnement.

CODE DE RETOUR

Au niveau du shell, une commande qui se termine avec un code de retour nul est considérée comme réussie. Le zéro indique le succès. Un code de retour non-nul indique un échec. Quand une commande se termine à cause d'un signal fatal, bash utilise la valeur 128+signal comme code de retour.
Si une commande n'est pas trouvée, le processus fils créé pour l'exécuter renvoie la valeur 127. Si la commande est trouvée mais pas exécutable, la valeur renvoyée est 126.
Si une commande échoue à cause d'une erreur survenue lors du développement ou de la mise en place des redirections, le code de retour est supérieur à zéro.
Les fonctions interne renvoient zéro (vrai) si elles réussissent et une valeur non nulle (faux) si une erreur se produit durant leur exécution. Toutes les fonctions internes renvoient 2 en cas d'erreur de syntaxe.
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 renvoie une valeur non-nulle. Voir également la commande interne exit plus bas.

SIGNAUX

Quand bash fonctionne de manière interactive, il ignore le signal SIGTERM (c'est pourquoi kill 0 ne tue pas un shell interactif), et le signal SIGINT est intercepté et géré (c'est pourquoi la commande interne wait n'est pas interruptible). Dans tous les cas, bash ignore le signal SIGQUIT. Si le contrôle de jobs est disponible, bash ignore les signaux SIGTTIN, SIGTTOU, et SIGTSTP.
Les jobs synchrones lancés par bash reçoivent les valeurs des signaux héritées par le shell de leur parent. Quand le contrôle de job n'est pas actif, les jobs en arrière-plan ignorent les signaux SIGINT et SIGQUIT également. Les commandes exécutées en tant que résultat de la substitution de commandes ignorent les signaux de contrôle de jobs émis par le clavier SIGTTIN, SIGTTOU, et SIGTSTP.
Par défaut, le shell se termine à la réception de SIGHUP. Avant de se terminer, il renvoie SIGHUP à tous les jobs en cours ou arrêtés. Les jobs arrêtés reçoivent aussi SIGCONT pour s'assurer qu'il recevront bien le SIGHUP. Pour empêcher le shell d'envoyer ce signal à un job particulier, il faut le retirer de la table des jobs à l'aide de la commande interne disown (voir FONCTIONS INTERNES DU SHELL plus bas) ou le marquer comme exempté de SIGHUP avec disown -h.
Si l'option du shell huponexit a été activée avec la fonction shopt, bash envoie un signal SIGHUP à tous les jobs lorsqu'un shell de login interactif se termine.
Lorsque bash reçoit un signal qu'il doit capturer, et qu'il attend la fin d'une commande, le gestionnaire de signal ne sera pas exécuté avant que la commande soit finie. Lorsque bash attend la fin d'une commande asynchrone avec wait la réception d'un signal capturé causera la fin immédiate de la commande wait avec un code de retour supérieur à 128, à la suite de quoi le gestionnaire de signal sera exécuté.

CONTRÔLE DES JOBS

Le contrôle des jobs permet d'arrêter (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 et de bash.
L'interpréteur associe un job à chaque tube. Il maintient une table des jobs en cours d'exécution, cette table pouvant être affichée avec la commande jobs. Quand bash lance un job de manière asynchrone (en arrière-plan), il affiche une ligne du genre :

[1] 25647

Cette ligne indique que le job est associé au numéro 1, et que le PID du dernier processus dans le tube est 25647. Tous les processus dans un tube simple font partie du même job. Bash utilise la notion de job comme une abstraction pour aider à les contrôler.
Pour faciliter l'implémentation d'une interface utilisateur pour le contrôle de job, le système introduit la notion d'ID de groupe de processus associés à un terminal. Les membre de ce groupe de processus (ceux dont le GID est égal au Process Group ID du terminal) reçoivent les signaux déclenchés par le clavier, comme SIGINT. Ces processus sont dits en avant-plan. Les processus en arrière-plan sont ceux dont le Process-GID diffère de celui du terminal ; ils ne reçoivent pas les signaux déclenchés par le clavier. Seuls les processus en avant-plan peuvent lire depuis le terminal ou écrire dessus. Les processus en arrière-plan qui tentent une lecture (ou une écriture) sur le terminal reçoivent les signaux SIGTTIN (SIGTTOU) émis par le pilote de périphérique du terminal, lesquels signaux suspendent l'exécution du processus (sauf interception du signal).
Si le système d'exploitation sur lequel bash fonctionne permet le contrôle des jobs, bash vous y donne accès. La frappe d'un caractère suspension (généralement ^Z, Contrôle-Z) pendant l'exécution d'un processus arrête celui-ci, et redonne la main à bash. La frappe d'un caractère suspension différée (généralement ^Y, Contrôle-Y) arrêtera le processus au moment où il tentera de lire depuis le terminal, et la main reviendra à bash. Il est possible de manipuler ces jobs en utilisant la commande bg (background = arrière-plan) pour continuer l'exécution en arrière-plan, fg (foreground) pour la reprendre en avant-plan, ou encore la commande kill pour tuer le processus. Un ^Z prend effet immédiatement, et élimine les sorties en attente.
Il y a plusieurs manières de faire référence à un job. Le caractère % introduit un nom de job. Le job numéro n peut être noté %n. On peut également faire référence à un job en utilisant un préfixe du nom utilise pour le lancer, ou une partie de la ligne de commande. Par exemple, %ce se réfère à un job arrêté nomme ce. Si ce préfixe correspond à plusieurs jobs, bash renverra une erreur. D'autre part, %?ce, fait référence à n'importe quel job contenant la chaîne ce dans sa ligne de commande. Si la sous-chaîne correspond à plusieurs jobs, bash renverra une erreur. Les symboles %% et %+ référencent le job courant du shell, c'est à dire le dernier job arrêté alors qu'il se trouvait en avant-plan. Le job précédent peut être mentionné en utilisant %-. Dans les affichages se rapportant aux jobs (par exemple ceux de la commande jobs le job courant est toujours indiqué par un +, et le job précédent avec un -.
Il suffit de nommer un job pour le ramener en avant-plan : %1 est synonyme de ``fg %1'', et ramène le job 1 depuis l'arrière-plan vers l'avant-plan. De même, ``%1 &'' relance le job 1, mais en arrière-plan cette fois, de manière équivalente à ``bg %1''.
Le shell est immédiatement prévenu lorsqu'un job change d'état. Normalement bash attend d'être prêt à afficher son symbole d'accueil avant de fournir un rapport sur les changements dans les statut des jobs, afin de ne pas perturber les autres affichages. Si l'option -b de la commande interne set est active bash affichera les modifications immédiatement.
Si vous essayez de quitter bash avec des jobs suspendus, le shell affichera un avertissement. La commande jobs permet de vérifier leurs états. Une fois cette commande invoquée, ou si vous essayez à nouveau de quitter le shell immédiatement, il n'y aura plus d'avertissement, et les jobs suspendus seront définitivement terminés.

SYMBOLE D'ACCUEIL (PROMPT)

Quand il est exécuté de manière interactive, bash affiche le symbole d'accueil principal PS1 dès qu'il est prêt à lire une commande, et le symbole d'accueil secondaire PS2 quand il a besoin de plus de données pour exécuter une commande. Bash permet de personnaliser ces chaînes d'accueil, avec des séquences d'échappement ayant les significations suivantes :
\a
le caractère d'alarme ASCII 07
\d
la date au format "Jour_de_la_semaine Mois Quantième" (ex : "Tue May 26")
\e
le caractère d'échappement ASCII 033
\h
le nom d'hôte de la machine, juqu'au premier point `.'
\H
le nom d'hôte complet de la machine
\n
un saut de ligne
\r
un retour-chariot
\s
le nom du shell, c'est à dire le nom de base de $0 (la portion suivant le dernier slash)
\t
l'heure actuelle au format HH:MM:SS sur 24 heures
\T
l'heure actuelle au format HH:MM:SS sur 12 heures
\@
l'heure actuelle sur 12 heures au format HH:MM am/pm
\u
le nom de l'utilisateur
\v
la version de bash (par exemple 2.04)
\V
le numéro de version complet de bash par exemple (2.04.0)
\w
le répertoire de travail en cours
\W
le nom de base du répertoire de travail en cours
\!
le numéro d'historique de la commande
\#
le numéro de la commande
\$
# si l'UID effectif est 0, $ sinon
\nnn
le caractère de code octal nnn
\\
le caractère antislash
\[
débute une série de caractères non-imprimables, qui permettent d'inclure des séquences de contrôle de terminal dans une chaîne d'accueil
\]
fin d'une série 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 liste d'historique qui peut contenir des commandes relues depuis cette liste (voir le paragraphe HISTORIQUE plus bas), alors que le numéro de commande est simplement une position dans la séquence de commandes exécutées depuis le début de la session shell actuelle. Après que la chaîne d'invite ait été décodée, elle est soumise à l'expansion des paramètres, substitution de commandes, évaluation arithmétique et découpage des mots, sous condition de l'option shell promptvars (voir la description de shopt au paragraphe FONCTIONS INTERNES DU SHELL plus bas).

BIBLIOTHÈQUE READLINE

Il s'agit de la bibliothèque qui gère la saisie lors des sessions interactives du shell, à moins que l'option -nolineediting n'ait été choisie. Par défaut les commandes d'édition de ligne sont similaires à celles d'emacs. Il est également possible de disposer d'une interface d'édition du style vi. Pour arrêter l'édition de ligne, utiliser l'option +o emacs ou +o vi de la commande set (voir FONCTIONS INTERNES DU SHELL plus bas).

Notation Readline


Dans ce paragraphe on utilisera la notation "à la emacs" pour indiquer les séquences 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. (Sur les claviers sans touches Méta, M-x signifie ESC x (sur les claviers français ESC est noté Échappement), autrement dit presser la touche Échappement puis la touche x. On dit alors qu'ESC est le préfixe méta. La séquence M-C-x signifie ESC-Contrôle-x, ou encore Presser la touche Échappement puis maintenez la touche Contrôle enfoncée tout en pressant la touche x.
Les commandes readline peuvent recevoir des arguments numériques, qui fonctionnent en règle générale comme compteurs de répétitions. Parfois, néanmoins le signe de l'argument est significatif. L'utilisation d'un argument négatif pour une commande agissant dans un sens donné (par ex. kill-line) fait agir la commande en sens inverse. Les commandes ayant un comportement différent sont indiqués plus bas.
Lorsqu'une commande est indiquée comme détruisant du texte, le texte effacé est en fait disponible pour une récupération ultérieure. Il est sauvé dans un tampon circulaire. Les suppressions successives accumulent les textes en un seul bloc qui peut être récupéré en une fois. Les commandes non destructrices séparent les blocs de textes dans le buffer circulaire.

Initialisation de Readline


L'affectation par défaut des touches peut être modifiée dans un fichier d'initialisation (inputrc). Le nom de ce fichier est lu dans la variable shell INPUTRC. Si la variable n'existe pas, le nom par défaut est ~/.inputrc. Quand un programme utilisant la bibliothèque readline démarre, les fichiers d'initialisation sont lus, et les affectations de touches et de variables sont mises en place. Il n'y a que peu d' constructions possibles dans les fichiers d'initialisation de Readline. 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 sont des affectations de touches ou de variables.
Les affectations par défaut des touches peuvent être modifiés par un fichier inputrc d'initialisation. D'autres programmes qui utilisent cette bibliothèque peuvent ajouter leurs propres affectations de touches.
Par exemple, en plaçant

M-Control-u: universal-argument
ou
C-Meta-u: universal-argument
dans le fichier ~/.inputrc, on affectera à la séquence de touche M-C-u la commande readline universal-argument.
Les caractères symboliques suivants sont acceptés : RUBOUT, DEL, ESC, LFD, NEWLINE, RET, RETURN, SPC, SPACE, et TAB. En plus des noms de commandes, readline permet d'affecter à une touche une chaîne de caractères qui sera insérée lors de la pression (macro).

Affectation des touches de Readline


La syntaxe des affectations de touches dans le fichier ~/.inputrc est simple. Les seules choses nécessaires sont le nom d'une commande, ou le texte d'une macro, et la séquence de touches à laquelle il faut l'affecter. Les touches peuvent être indiquées de deux manières : sous forme de nom symbolique, éventuellement précédé de Meta- ou Control-, ou sous forme de séquence de touches. Avec la forme touche:nom_de_fonction ou macro, touche est le nom de la séquence de touches épelée en Anglais. Par exemple :
Control-u: universal-argument
Meta-Rubout: backward-kill-word
Control-o: "> sortie"

Dans ces exemples, C-u est assigné à la fonction universal-argument, M-DEL à la fonction backward-kill-word, et C-o est affecté à la macro exprimée dans la partie gauche (c'est à dire insérera > sortie sur la ligne).
Avec la seconde forme, "touches":nom_de_fonction ou macro, touches n'est plus un nom symbolique, mais décrit une séquence complète de touches entre guillemets. Certaines séquences d'échappement dans le style GNU Emacs peuvent être utilisée, comme dans l'exemple suivant :
"\C-u": universal-argument
"\C-x\C-r": re-read-init-file
"\e[11~": "Touche Fonction 1"

Dans cet exemple, C-u est à nouveau assigné à la fonction universal-argument, C-x C-r à la fonction re-read-init-file, et ESC [ 1 1 ~ insérera le texte Touche Fonction 1. L'ensemble complet des séquences d'échappement est le suivant :
\C-
préfixe Contrôle
\M-
préfixe Méta
\e
caractère d'échappement
\\
backslash
\
un guillemet " littéral
\'
une apostrophe ' littéral

En plus des séquences dans le style Gnu Emacs, un second jeu de séquences d'échappement est disponible
\a
alerte (sonnerie)
\b
backspace
\d
effacement
\f
saut de page
\n
saut de ligne
\r
retour-chariot
\t
tabulation horizontale
\v
tabulation verticale
\nnn
le caractère de code ASCII nnn en octal (de un à trois chiffres)
\xnnn
le caractère de code ASCII nnn en hexadécimal (un à trois chiffres)

Lorsque l'on saisit le texte d'une macro, il faut utiliser des apostrophes ou des guillemets pour indiquer la définition de la macro. Les textes non protégés sont considérés comme des noms de fonctions. Le backslash protégera n'importe quel caractère dans la définition d'une macro, y compris " et '.
Bash permet d'afficher ou de modifier les affectations des touches avec la commande interne bind. On peut changer de mode d'édition durant une session interactive en utilisant l'option -o de la commande interne set (voir le paragraphe COMMANDES INTERNES DU SHELL plus bas).

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 déclaration de la forme

set nom_de_variable valeur

Sauf contre-indication, les variables de readline prennent les valeurs On ou Off. Les variables, et leurs valeurs par défaut, sont :
bell-style (audible)
Cette variable commande readline lorsqu'il faut déclencher le signal sonore du terminal. Si cette variable contient la valeur none, readline n'utilise pas de signal, si elle contient visible, on utilise un avertisseur visuel, si elle contient audible, readline essaie le signal sonore du terminal.
comment-begin (``#'')
Cette chaîne est insérée quand la commande readline insert-comment est exécutée. Elle est affectée à M-# en mode emacs, et # en mode vi.
completion-ignore-case (Off)
Sur On, Readline effectue les comparaisons et complétions de noms de fichiers en différenciant les majuscules et minuscules.
completion-query-items (100)
Lors de la complétion de commandes, si le nombre de possibilités est supérieur à cette valeur, on demandera confirmation à l'utilisateur avant d'afficher la liste des possibilités. Le nombre de complétions possibles est déterminé par la commande possible-completions. Il peut s'agir de n'importe quelle valeur entière supérieure ou égale à zéro
convert-meta (On)
Si cette variable contient la valeur On, readline transformera en séquences ASCII les caractères ayant leur huitième bit à 1. Il supprimera ce huitième bit, et insérera comme préfixe le caractère d'échappement (en utilisant ce caractère d'échappement comme préfixe méta).
disable-completion (Off)
Si cette variable contient On, Readline désactivera la complétion des mots. Les caractères de complétion seront insérés sur la ligne comme s'ils avaient été associé à self-insert.
editing-mode (emacs)
Cette variable indique si readline doit démarrer avec des affectations de touches similaires à emacs ou à vi. editing-mode peut prendre les valeurs emacs ou vi.
enable-keypad (Off)
Sur On, Readline essayera d'activer le clavier de l'application lorsqu'elle sera invoquée. Sur certains systèmes, cela est nécessaire pour utiliser les touches flèchées.
expand-tilde (Off)
Si cette variable contient la valeur on, le développement du tilde est effectué lorsque readline tente une complétion de commandes.
horizontal-scroll-mode (Off)
Si cette variable contient la valeur On, readline utilisera une seule ligne d'affichage, et la fera défiler horizontalement si elle devient plus longue que la largeur de l'écran, plutôt que de basculer sur une nouvelle ligne.
input-meta (Off)
Si cette variable contient la valeur On, readline acceptera des saisies sur huit bits (autrement dit il ne supprimera pas le huitième bit), quelque soit le terminal utilisé. Le nom meta-flag est un synonyme pour cette variable.
isearch-terminators (``C-[C-J'')
La chaîne de caractères qui doivent terminer une recherche incrémentale sans que le caractère ne soit exécuté comme une commande. Si cette variable n'a pas de valeur, les caractères ESC et C-J termineront une recherche incrémentale.
keymap (emacs)
Configure l'affectation des touches. Les jeux d'affectations disponibles sont 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; notez que la configuration de la variable editing-mode modifie aussi l'affectation par défaut.
mark-directories (On)
Sur On, les noms de répertoires sont complétés par un slash.
mark-modified-lines (Off)
Sur On, les lignes d'historique qui ont été modifiées seront précédées à l'affichage d'un astérisque (*).
output-meta (Off)
Si cette variable contient la valeur On, readline affichera directement les caractères ayant leur huitième bit à 1, plutôt que d'utiliser une séquence d'échappement avec le préfixe méta.
print-completions-horizontally (Off)
Sur On, Readline affichera les possibilités de complétions triés horizontalement dans l'ordre alphabétique plutôt que verticalement.
show-all-if-ambiguous (Off)
Cette variable agit sur la complétion des commandes. Lorsqu'elle contient la valeur on, toutes les complétions possibles sont affichées immédiatement plutôt que de déclencher l'avertisseur sonore.
visible-stats (Off)
Sur On, un caractère indiquant le type de fichier, comme fourni par l'appel-système stat(2) sera ajouté aux noms de fichiers lors de l'affichage des complétions possibles.

Constructions conditionnelles de Readine


Readline propose un mécanisme inspiré des possibilités de compilation conditionnelle en C, qui permet d'effectuer certaines assignations de variables, ou affectations de touches en fonction du résultat d'un test. Il y a quatre directives utilisables.
$if
La structure $if permet d'affecter les touches en fonction du mode d'édition, du terminal de saisie, ou de l'application qui utilise la bibliothèque readline. Le texte du test se trouve à la suite du $if, jusqu'à la fin de la ligne.
mode
La forme mode= de la structure $if permet de vérifier si readline est en mode emacs ou en mode vi. Ceci peut être utilisé conjointement à la commande set keymap, par exemple pour ne configurer les jeux de touches emacs-standard et emacs-ctlx que si readline démarre en mode emacs.
term
La forme term= peut être utilisée pour ajouter des affectations de touches spécifiques au terminal, par exemple sur des touches de fonction. Le mot à droite du signe = est comparé au nom complet du terminal, et à la portion du nom qui précède un éventuel signe -. Ceci permet, par exemple, de faire correspondre le mot sun aussi bien au terminal sun qu'au terminal sun-cmd.
application
La forme application permet d'inclure des configurations spécifiques à l'application. Chaque programme utilisant la bibliothèque readline configure un nom d'application, et un fichier d'initialisation peut dépendre de ce nom. Ceci est utile pour des affecter des touches intéressant un programme spécifique. Ainsi, les commandes suivantes ajoutent une séquence de touches protégeant par des guillemets le mot courant ou le mot précédent, sous Bash :
$if Bash
# Protéger le mot actuel ou le précédent
"\C-xq": "\eb\"\ef\""
$endif
$endif
Cette commande, comme on l'a vu dans l'exemple ci-dessus, termine une commande $if.
$else
Permet d'ajouter des commandes qui seront exécutées si un $if échoue.

$include
Cette directive prend un simple nom de fichier en argument et y lit les commandes et les affectations. Par exemple, la directive suivante lit le fichier /etc/inputrc:
$include  /etc/inputrc

Recherche


Readline propose des commandes de recherche au sein de l'historique de commandes (voir HISTORIQUE plus bas) 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 ait terminé de saisir la chaîne recherchée. À chaque caractère saisi, Readline affiche l'entrée suivante de l'historique qui corresponde à la chaîne déjà entrée. Une recherche incrémentale nécessite seulement le nombre de caractères indispensable pour retrouver l'entrée d'historique désirée. Les caractères se trouvant dans la variable isearch-terminators servent à terminer une recherche incrémentale. Si cette variable n'a pas de valeur, les caractères Escape et Contrôle-J terminent une recherche incrémentale. Contrôle-G permet d'interrompre une recherche incrémentale de reprendre la ligne originale. Lorsque la recherche est finie, l'entrée d'historique contenant la chaîne désirée devient la ligne en cours. Poue trouver une autre entrée d'historique correspondant aussi, il faut taper Contrôle-S ou Contrôle-R. Cela recherchera en avant ou en arrière l'entrée d'historique suivante qui corresponde à la chaîne saisie jusque là. Toute séquence de touche affectée à une commande Readline terminera la recherche et exécutera la commande. Par exemple, un newline terminera la recherche et validera la ligne, ce qui exécute la commande de la ligne d'historique.
Les recherches non-incrémentales lisent la chaîne désirée en entier avant de démarrer la recherche de correspondance dans la liste d'historique. La chaîne peut être saisie par l'utilisateur ou se trouver sur la ligne en cours.

Noms des commandes Readline


Voici une liste des noms de commandes, ainsi que les séquences de touches auxquelles elles sont attribuées par défaut. Les commandes sans séquence indiquée n'ont pas d'affectation par défaut.

Commandes de déplacement


beginning-of-line (C-a)
Saut au début de la ligne en cours.
end-of-line (C-e)
Saut à la fin de la ligne.
forward-char (C-f)
Avancer d'un caractère.
backward-char (C-b)
Reculer d'un caractère.
forward-word (M-f)
Avancer jusqu'à la fin du mot suivant. Les mots sont composés de caractères alphanumériques (lettres et chiffres).
backward-word (M-b)
Reculer jusqu'au début du mot courant, ou du précédent. Les mots sont composés de caractères alphanumériques (lettres et chiffres).
clear-screen (C-l)
Effacer l'écran, en laissant la ligne courante en haut de l'écran. S'il y a un argument, rafraîchir la ligne en cours sans effacer l'écran.
redraw-current-line
Rafraîchir la ligne en cours. Par défaut pas d'affectation de touche.

Commandes de manipulation de l'historique


accept-line (Retour-Chariot)
Valider la ligne, sans se soucier de l'emplacement du curseur. Si la ligne n'est pas vide, l'ajouter à la liste d'historique, sous contrôle de la variable HISTCONTROL. Si cette ligne est une modification d'une ligne de l'historique, restaurer cette dernière.
previous-history (C-p)
Récupérer la commande précédente de la liste d'historique.
next-history (C-n)
Récupérer la commande suivante dans la liste d'historique.
beginning-of-history (M-<)
Récupérer la première ligne de l'historique.
end-of-history (M->)
Retourner à la fin de l'historique, c'est à dire à la ligne en cours d'édition.
reverse-search-history (C-r)
Rechercher en arrière dans l'historique, en remontant. C'est une recherche incrémentale.
forward-search-history (C-s)
Rechercher en avant dans l'historique, en descendant. C'est une recherche incrémentale.
non-incremental-reverse-search-history (M-p)
Rechercher une chaîne en arrière dans l'historique, en remontant depuis la ligne actuelle, utiliser une recherche non-incrémentale.
non-incremental-forward-search-history (M-n)
Rechercher une chaîne en avant dans l'historique, utiliser une recherche non-incrémentale.
history-search-forward
Rechercher en avant dans l'historique la chaîne comprise entre le début de la ligne actuelle, et la position du curseur. Par défaut cette commande n'est affectée à aucune touche. Cette une recherche non-incrémentale.
history-search-backward
Rechercher en arrière dans l'historique la chaîne comprise entre le début de la ligne actuelle, et la position du curseur. Cette une recherche non-incrémentale.
yank-nth-arg (M-C-y)
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 nième mot de la commande précédente (les mots sont numérotés à partir de 0). Un argument négatif insère le nième mot en partant de la fin de la commande précédente.
yank-last-arg (M-., M-_)
Insérer à la position du curseur le dernier argument de la commande précédente (le dernier mot de la ligne précédente). Avec un argument, se comporte exactement comme yank-nth-arg. Les appels successifs à yank-last-arg reviennent en arrière dans l'historique en insérant le dernier argument de chaque ligne à chaque fois.
shell-expand-line (M-C-e)
Développer, comme le fait le shell, la ligne en cours. Ceci inclut le remplacement des alias et des directives d'historique, aussi bien que l'ensemble des expansions effectuées par le shell. Voir EXPANSION DE L'HISTORIQUE plus bas, pour une description détaillée.
history-expand-line (M-^)
Effectuer l'expansion d'historique sur la ligne en cours. Voir le paragraphe EXPANSION DE L'HISTORIQUE plus bas, pour une description détaillée.
magic-space
Effectuer l'expansion de l'historique sur la ligne en cours et insérer une espace. Voir EXPANSION DE L'HISTORIQUE plus bas, pour une description détaillée.
alias-expand-line
Effectuer l'expansion des alias sur la ligne en cours. Voir ALIAS plus bas pour une description des expansions d'alias.
history-and-alias-expand-line
Effectuer l'expansion de l'historique et des alias sur la ligne en cours.
insert-last-argument (M-., M-_)
un synonyme de yank-last-arg.
operate-and-get-next (C-o)
Valider la ligne en cours, et récupérer la ligne suivante de l'historique pour l'édition. Tout argument est ignoré.

Commande d'édition de texte


delete-char (C-d)
Effacer le caractère sous le curseur. Si le curseur est au début de la ligne, si celle-ci est vide, et si le dernier caractère frappé n'était pas delete-char, alors la valeur renvoyée est EOF.
backward-delete-char (Rubout)
Effacer le caractère derrière le curseur. Lorsque un argument est fourni, le texte effacé est sauvegardé dans le buffer circulaire.
forward-backward-delete-char
Effacer le caractère sous le curseur, sauf s'il est en fin de ligne, auquel cas le caractère derrière le curseur est effacé. Par défaut cette action n'est associée à aucune touche.
quoted-insert (C-q, C-v)
Ajouter littéralement sur la ligne le caractère frappé suivant. Ceci permet d'insérer des caractères comme C-q, par exemple.
tab-insert (C-v TAB)
Insérer un caractère de tabulation.
self-insert (a, b, A, 1, !, ...)
Insérer le caractère mentionné.
transpose-chars (C-t)
Échanger les caractères se trouvant devant et sous le curseur. Le curseur est avancé d'un caractère. À la fin d'une ligne, les caractères échangés sont les deux précédents. Les arguments négatifs ne sont pas acceptés.
transpose-words (M-t)
Échanger le mot où se trouve le curseur et le mot précédent, puis avancer le curseur après ce mot.
upcase-word (M-u)
Transformer le mot en cours (ou le suivant) en majuscules. Avec un argument négatif, agir sur le mot précédent mais ne pas déplacer le curseur.
downcase-word (M-l)
Transformer le mot en cours (ou le suivant) en minuscules. Avec un argument négatif, agir sur le mot précédent mais ne pas déplacer le curseur.
capitalize-word (M-c)
Passer en majuscule l'initiale du mot en cours (ou du suivant). Avec un argument négatif, agir sur le mot précédent mais ne pas déplacer le curseur.

Effacement et récupération


kill-line (C-k)
Effacer le texte depuis l'emplacement du curseur jusqu'à la fin de la ligne.
backward-kill-line (C-x C-Rubout)
Effacer en arrière jusqu'au début de ligne.
unix-line-discard (C-u)
Effacer le texte entre le début de la ligne et l'emplacement du curseur. Le texte est sauvegardé dans le buffer circulaire.
kill-whole-line
Effacer toute la ligne sans tenir compte de la position du curseur.
kill-word (M-d)
Effacer le texte entre l'emplacement du curseur et la fin du mot en cours, ou jusqu'à la fin du mot suivant si le curseur est entre deux mots. Les séparations de mots sont les mêmes que celles de forward-word.
backward-kill-word (M-Rubout)
Effacer le mot sous le curseur Les séparations de mots sont les mêmes que celles de backward-word.
unix-word-rubout (C-w)
Effacer le mot derrière le curseur, en utilisant l'espace blanc comme limite de mot. Cette limite est différente de celle de backward-kill-word.
delete-horizontal-space (M-\)
Effacer tous les espaces blancs et les tabulations autour du curseur.
kill-region
Détruire le texte entre le curseur et la marque (position du curseur sauvegardée précédemment). On appelle ceci une région.
copy-region-as-kill
Copier le texte de la région vers le buffer circulaire.
copy-backward-word
Copier le mot précédant le curseur dans le buffer circulaire. Les séparations de mots sont les mêmes que celles de backward-word.
copy-forward-word
Copier le mot suivant le curseur dans le buffer circulaire. Les séparations de mots sont les mêmes que celles de backward-word.
yank (C-y)
Récupérer le texte au sommet du tampon circulaire.
yank-pop (M-y)
Exécuter une rotation du tampon circulaire, et récupérer le nouveau texte situé à son sommet. Ceci ne fonctionne qu'après yank ou yank-pop.

Arguments numériques


digit-argument (M-0, M-1, ..., M--)
Ajouter le chiffre aux arguments déjà présents, ou créer un nouvel argument. M-- crée un argument négatif.
universal-argument
Il s'agit d'une autre manière d'indiquer un argument. Si cette commande est suivie d'un ou plusieurs chiffres éventuellement précédés d'un signe moins, ces chiffres consituent un 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. De plus, si la commande est suivie immédiatement par un caractère autre qu'un chiffre ou le signe moins, le compteur d'argument de la commande suivante est multiplié par 4. Le compteur d'argument est initialement à un, ainsi la première exécution de cette commande l'amène à quatre, la seconde à seize, et ainsi de suite.

Complétion


complete (TAB)
Essayer d'effectuer une complétion du texte situé avant le curseur. Bash effectue la complétion en considérant successivement le texte comme une variable (s'il commence par $), un nom d'utilisateur (s'il commence par ~), un nom d'hôte (s'il commence par @), ou une commande (y compris les alias et les fonctions). Si rien ne fonctionne, il essaye la complétion en nom de fichier.
possible-completions (M-?)
Affiche la liste des complétions possibles pour le texte situé avant le curseur.
insert-completions (M-*)
Insérer avant le curseur l'ensemble des complétions qui seraient fournies par possible-completions.
menu-complete
Comme complete, mais en remplaçant le mot à compléter par une seule correspondance de la liste des complétions possibles. Des exécutions répétées de menu-complete parcourrent la liste des complétions possibles, en insérant une correspondance à chaque fois. À la fin de la liste des complétions, l'alarme sonore est déclenchée et le texte initial est récupéré. Un argument n déplace de n positions dans la liste de correspondances. Un argument négatif peut être utilisé pour revenir en arrière dans la liste. Cette commande est prévue pour être associée à la touche TAB, mais n'est pas affectée par défaut.
delete-char-or-list
Effacer le caractère sous le curseur sauf au début ou en fin de ligne (comme delete-char). En fin de ligne, se comporte comme possible-completions. Cette commande n'est associée à aucune touche par défaut.
complete-filename (M-/)
Essayer la complétion des noms de fichiers sur le texte situé avant le curseur.
possible-filename-completions (C-x /)
Affiche la liste des complétions possibles en noms de fichiers pour le texte situé avant le curseur.
complete-username (M-~)
Essayer la complétion des noms d'utilisateurs sur le texte situé avant le curseur.
possible-username-completions (C-x ~)
Affiche la liste des complétions possibles en noms d'utilisateurs pour le texte situé avant le curseur.
complete-variable (M-$)
Essayer la complétion des noms de variables shell sur le texte situé avant le curseur.
possible-variable-completions (C-x $)
Affiche la liste des complétions possibles en noms de variables shell pour le texte situé avant le curseur.
complete-hostname (M-@)
Essayer la complétion des noms d'hôtes sur le texte situé avant le curseur.
possible-hostname-completions (C-x @)
Affiche la liste des complétions possibles en noms d'hôtes pour le texte situé avant le curseur.
complete-command (M-!)
Essayer la complétion des commandes sur le texte situé avant le curseur. La complétion des commandes inclut les alias, les mots réservés, les fonctions shell, les fonctions internes, et finalement les exécutables, dans cet ordre.
possible-command-completions (C-x !)
Affiche la liste des complétions possibles en noms de commandes pour le texte situé avant le curseur.
dynamic-complete-history (M-TAB)
Essayer la complétion du texte situé avant le curseur, en recherchant dans la liste d'historique.
complete-into-braces (M-{)
Renvoie entre accolades la liste des complétions possibles en noms de fichiers du texte avant le curseur, afin qu'elle soit utilisable par le shell (voir Expansion des Accolades plus haut).

Macros Claviers


start-kbd-macro (C-x ()
Démarre la mémorisation dans la macro en cours des caractères tapés.
end-kbd-macro (C-x ))
Arrête la mémorisation dans la macro en cours des caractères tapés, et sauvegarde la définition.
call-last-kbd-macro (C-x e)
Ré-exécute la dernière macro définie, en agissant comme si les caractères contenus dans cette macro étaient tapés au clavier.

Divers


re-read-init-file (C-x C-r)
Lire le contenu du fichier d'initialisation personnalisée, en incorporant les assignations de variables, ou les affectations de touches qui s'y trouvent.
abort (C-g)
Abandonner l'édition en cours et déclencher l'avertisseur sonore (soumis à la configuration de la variable bell-style).
do-uppercase-version (M-a, M-b, M-x, ..)
Si le caractère précédé de Méta x est en minuscule, exécuter la commande correspondant aux caractères majuscules indiqués.
prefix-meta (ESC)
Considérer le prochain caractère tapé comme une séquence Meta. ESC f est équivalent à Meta-f.
undo (C-_, C-x C-u)
Fonction d'annulation incrémentale, chaque ligne étant mémorisée séparément.
revert-line (M-r)
Annuler toutes les modifications sur cette ligne. Ceci est équivalent à répéter undo en nombre suffisant pour ramener la ligne à son état initial.
tilde-expand (M-~)
Effectuer le développement du tilde sur le mot en cours.
set-mark (C-@, M-<space>)
Placer une marque à la position actuelle. Si un argument numérique est fourni, la marque est posée à l'emplacement correspondant.
exchange-point-and-mark (C-x C-x)
Échanger le curseur et la marque. Le curseur est placée à la position sauvegardée précédemment, et l'ancien curseur est mémorisé par la marque.
character-search (C-])
Un caractère est lu et le curseur déplacé à l'occurrence suivante de ce caractère. Un argument négatif recherche les occurrences précédentes.
character-search-backward (M-C-])
Un caractère est lu et le curseur déplacé à l'occurrence précédente de ce caractère. Un argument négatif recherche les occurrences suivantes.
insert-comment (M-#)
La de la variable readline comment-begin est insérée au début de la ligne en cours, et la ligne est validée comme si on avait tappé Newline. Ceci sert à transformer la ligne en cours en commentaire du shell.
glob-expand-word (C-x *)
Le mot précédant le curseur est considéré comme un motif d'expansion de nom de fichier et la liste des possibilités est insérée à sa place.
glob-list-expansions (C-x g)
Le liste des expansions qui aurait été produite pa glob-expand-word est affichée et la ligne est rafraîchie.
dump-functions
Afficher toutes les fonctions et leurs assignations de touches sur le flux de sortie de readline. Si un argument numérique est présent, la sortie est mise en forme pour être compatible avec le format d'un fichier inputrc.
dump-variables
Afficher toutes les variables Readline modifiables et leurs valeurs sur le flux de sortie. Si un argument numérique est fournie, la sortie est formatée pour pouvoir être acceptée comme contenu d'un fichier inputrc.
dump-macros
Afficher toutes les séquences de touches associées à des macros et les chaînes auxquelles elles correspondent. Un argument numérique réclame que la sortie soit mise en forme pour être compatible avec le format d'un fichier inputrc.
display-shell-version (C-x C-v)
Afficher des informations sur la version en cours de bash.

HISTORIQUE

Quand l'option -o history de la commande set est active, l'interpréteur donne accès à un historique des commandes, c'est à dire la liste des commandes précédemment utilisées. Le texte des HISTSIZE dernières commandes (par défaut 500) est mémorisé dans l'historique. Le shell les enregistre avant expansion des paramètres et variables (voir le paragraphe EXPANSION plus haut) mais après avoir effectué l'expansion historique, sous contrôle des variables HISTIGNORE et HISTCONTROL. Au démarrage, l'historique est initialisé avec le fichier dont le nom est contenu dans la variable HISTFILE (par défaut ~/.bash_history). HISTFILE est tronqué si nécessaire, pour ne pas dépasser HISTFILESIZE lignes. Lorsqu'un shell interactif se termine, les HISTSIZE dernières lignes de l'historique sont copiées dans le fichier HISTFILE. Si l'option shell histappend (voir la description de shopt dans COMMANDES INTERNES DU SHELL plus bas) est active, les lignes sont ajoutées au fichier d'historique, sinon le fichier est écrasé. Si la variable HISTFILE n'existe pas, ou si le fichier n'est pas accessible en écriture, l'historique n'est pas enregistré. Après la sauvegarder, le fichier d'historique est tronqué pour ne pas contenir plus de HISTFILESIZE lignes. Si HISTFILESIZE n'est pas configurée, aucune troncature n'a lieu.
La commande interne fc (voir le paragraphe COMMANDES INTERNES DU SHELL plus bas) permet d'afficher, d'éditer, ou de ré-exécuter une partie de l'historique. La commande interne history permet d'afficher l'historique et de manipuler le fichier d'historique. Quelque soit le mode d'édition en ligne de commande, des commandes de recherche sont disponibles pour accéder à l'historique.
Le shell permet de configurer quelles commandes seront sauvées dans la liste d'historique. Les variables HISTCONTROL et HISTIGNORE peuvent demander au shell de ne sauvegarder qu'une partie des commandes saisies. L'option shell cmdhist si elle est active, demande au shell d'essayer de sauver chaque ligne d'une commande multiligne dans la même entrée de la liste, en ajoutant des points-virgules si nécessaire pour préserver l'exactitude de la syntaxe. L'option shell lithist demande de sauvegarder les commandes avec des sauts de lignes incorporés plutôt que des points-virgules. Voir la description de la commande shopt dans COMMANDES INTERNES DU SHELL pour des détails sur la configuration des options shell.

EXPANSION DE L'HISTORIQUE


Le shell propose des possibilités d'expansion de l'historique qui sont semblables à celles de csh. Ce paragraphe décrit la syntaxe de ces commandes. Elles sont utilisables par défaut dans les shells interactifs, il est toutefois possible de les désactiver en utilisant l'option +H de la commande interne set (voir le paragraphe COMMANDES INTERNES DU SHELL plus bas). Les shells non-interactifs n'effectuent pas d'expansion d'historique par défaut.
L'expansion de l'historique permet d'insérer des mots de l'historique dans le flux d'entrée, facilitant la répétition de commande, l'insertion des arguments d'une ligne antérieure dans la saisie en cours, ou la correction rapide d'erreur de frappe dans une commande précécente.
Le développement de l'historique est fait immédiatement après la lecture d'une ligne complète, avant que le shell ne fasse la séparation des mots. Il se déroule en deux parties. La première consiste à déterminer la ligne de l'historique à utiliser pour les substitutions, la seconde permet de sélectionner les parties de la lignes à inclure dans la nouvelle ligne. La ligne sélectionnée dans l'historique est l'événement, et les parties de cette ligne à réutiliser sont des mots. Plusieurs modificateurs permettent de manipuler les mots sélectionnés. La ligne est découpée en mots de la même manière que lors d'une saisie, ainsi plusieurs mots séparés par des méta-caractères, et protégés par des guillemets sont considérés comme un unique mot. L'expansion de l'historique est introduite par l'apparition du caractère d'expansion, qui se trouve être ! par défaut. Seul le backslash (\) et les apostrophes permettent de protéger le caractère d'échappement de l'historique, par défaut !.
Plusieurs options shell, configurables aved la commande interne shopt permettent d'ajuster le comportement de l'expansion de l'historique. Si l'option shell histverify est activée (voir la description de la commande interne shopt) et si readline est utilisée, les substitutions d'historiques ne sont pas transmises tout de suite à l'analyseur du shell. A la place, la ligne développée est rechargée dans la mémoire tampon 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 peut servir à examiner ce qu'une substituion donnera avant de l'employer réellement. L'option -s de la commande interne history permet d'ajouter des commandes à la fin de la liste d'historique sans les les invoquer effectivement, afin qu'elles soient disponibles pour des rappels ultérieurs.
Le shell offre le contrôle des divers caractères utilisés par le mécanisme d'expansion de l'historique (voir la description de histchars plus haut dans le paragraphe Variables du Shell).

Indicateur d'événement


Un indicateur d'événement est une référence à une ligne de commande dans la liste d'historique.
!
Débute une substitution de l'historique, sauf s'il est suivi par un blanc, retour-chariot, = ou (.
!n
Se réfère à la ligne de commande n.
!-n
Se réfère à la ligne de commande actuelle moins n.
!!
Est une référence à la commande précédente. C'est un synonyme de `!-1'.
!chaîne
Référence la plus récente commande commençant par la chaîne.
!?chaîne[?]
Se réfère à la plus récente commande contenant la chaîne. Le ? final peut être omis si la chaîne est suivie immédiatement d'un retour-chariot.
^chaîne_1^chaîne_2^
Substitution rapide. Répéter la dernière commande en remplaçant la chaîne_1 par la chaîne_2. Équivalent à ``!!:s/chaîne_1/chaîne_2/'' (voir Modificateurs plus bas).
!#
La ligne entière tapée jusqu'à présent.

Indicateurs de mots


Ces indicateurs servent à sélectionner les mots désirés dans un événement. Un : sépare l'indicateur d'événements de l'indicateur de mot. On peut l'omettre si l'indicateur de mot commence par ^, $, *, -, ou %. Les mots sont numérotés depuis le début de la ligne, le premier étant note 0 (zéro). Les mots sont insérés dans la ligne courante, séparés par des espaces.
0 (zéro)
Le zéro-ième mot. Pour le shell, c'est le nom de la commande.
n
Le n-ième mot.
^
Le premier argument, c'est à dire le mot 1.
$
Le dernier argument.
%
Le mot correspondant à la recherche la plus récente `?chaîne?'.
x-y
Un intervalle de mots, `-y' permet d'abréger `0-y'.
*
Tous les mots sauf le zéro-ième. C'est un synonyme pour `1-$'. Même s'il n'y a qu'un mot, * ne déclenche pas d'erreur, simplement la chaîne vide est renvoyée.
x*
Abréviation de x-$.
x-
Abréviation de x-$ comme x*, mais sans le dernier mot.

Si un indicateur de mot est founi sans indication d'événement, la dernière commande est utilisée.

Modificateurs


Après l'éventuel indicateur de mot, vous pouvez ajouter une séquence de modificateurs, chacun précédé par un `:'.

h
Élimine la fin du chemin d'accès, ne laissant que son début.
t
Supprimer tout le début d'un chemin d'accès, en ne laissant que la fin.
r
Supprime un suffixe final de la forme .xxx, en ne laissant que le nom de base.
e
Tout supprimer sauf le suffixe final.
p
Afficher la nouvelle commande sans l'exécuter.
q
Protéger les mots substitués, pour éviter les substitutions futures.
x
Protéger les mots substitués, comme avec q, mais en faisant la séparation des mots sur les blancs et les retour-chariots.
s/ancien/nouveau/
Remplacer par nouveau la première occurrence de ancien sur la ligne d'événement. N'importe quel délimiteur peut être utilisé à la place de /. Le dernier délimiteur est facultatif si c'est le dernier caractère de la ligne d'événement. Le délimiteur peut être protégé dans ancien et nouveau par un simple backslash. Si & apparaît dans nouveau, il est remplacé par ancien. Un simple backslash protégera le &. Si ancien est nul, il est remplacé par le dernier ancien substitué, ou si aucune substitution n'a eu lieu précédemment, la dernière chaîne dans une recherche !?chaîne[?].
&
Répéter la substitution précédente.
g
Appliquer les changements sur la ligne d'événement entière. On utilise ceci conjointement à `:s' (par exemple `:gs/ancien/nouveau/') ou `:&'. S'il est utilisé avec `:s', n'importe quel 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.

COMMANDES INTERNES DU SHELL


Sauf indication contraire, toute commande décrite comme acceptant des options précédées de - accepte également la notation -- pour signifier la fin de la liste d'options.
: [arguments]
Pas d'effet. Cette commande ne fait rien d'autre que l'expansion des arguments et la mise en place des redirections. Le code de retour est nul.
. fichier [arguments]
source fichier [arguments]
Lire et exécuter les commandes contenues dans le fichier avec l'environnement du shell en cours, puis renvoyer le code de retour de la dernière commande exécutée dans le fichier. Si le nom du fichier ne contient pas de slash, les chemins d'accès contenus dans PATH sont parcourus pour rechercher le répertoire contenant le fichier. Lorsqu'il est recherché dans le PATH le fichier n'a pas besoin d'être exécutable. Le répertoire de travail en cours est finalement examiné si aucun fichier n'est trouvé dans le PATH. Si l'option sourcepath de la commande interne shopt est désactivée, le PATH n'est pas parcouru. Si des arguments sont fournis, ils sont transmis dans les paramètres positionnels lorsque le fichier est exécuté. Sinon les paramètres positionnel ne sont pas modifiés. Le code de retour est celui de la dernière commande exécutée au sein du script (0 si aucune commande n'est exécutée), et faux si le fichier n'est pas trouvé.
alias [-p] [nom[=valeur] ...]
La commande alias, sans argument ou avec l'option -p affiche sur la sortie standard la liste des alias actuellement définis, sous la forme nom=valeur. Lorsque l'on fournit des arguments, un alias est créé pour chaque nom auquel on a donné une valeur. Un espace final dans une valeur forcera la recherche d'alias dans le mot suivant lors de l'expansion de l'alias. Pour chacun des noms pour lesquels aucune valeur n'est fournie dans la liste d'arguments, le nom et la valeur de l'alias sont affichés. La commande Alias renvoie vrai, sauf si l'on indique un nom pour lequel aucun alias n'a été défini.
bg [job]
Relance en arrière-plan le job suspendu, comme s'il avait été lancé avec &. Si aucun job n'est précisé, le job en cours est basculé en arrière-plan. bg job renvoie 0 si le contrôle des jobs est désactivé, ou si le job n'existe pas, ou encore s'il a été lancé sans contrôle de jobs.
bind [-m jeu_de_touches] [-lpsvPSV]
bind [-m jeu_de_touches] [-q nom] [-u fonction] [-r séquence]
bind [-m jeu_de_touches] -f fichier
bind [-m jeu_de_touches] séquence:fonction
Affiche les affectations de touches readline pour une fonction, ou affecte une séquence de touches à une fonction ou une macro readline. La syntaxe d'affectation est identique à celle des fichiers .inputrc, mais chaque affectation doit être fournie sous forme d'argument indépendant, par exemple '"\C-x\C-r": re-read-init-file'. Les éventuelles options ont les significations suivantes :
-m jeu_de_touches
Modifier la configuration du jeu_de_touches indiqué. Les noms des jeux_de_touches acceptés sont emacs, emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move, vi-command, et vi-insert. vi est équivalent à vi-command; emacs est équivalent à emacs-standard.
-l
Afficher la liste des noms de toutes les fonctions readline
-p
Affiche les noms des fonctions readline et leurs affectations de manière à pouvoir les relire.
-P
Affiche les noms des fonctions readline et leurs affectations.
-v
Affiche les noms des variables readline et leurs valeurs de manière à pouvoir les relire.
-V
Affiche les noms des variables readline et leurs valeurs.
-s
Affiche les séquences de touches readline affectées aux macros et les chaînes correspondantes, de manière à pouvoir les relire.
-S
Affiche les séquences de touches readline affectées aux macros et les chaînes correspondantes.
-f fichier
Lire les affectations dans le fichier
-q fonction
Rechercher la touche permettant d'invoquer la fonction indiquée
-u fonction
Désaffecter toutes les touches correspondant à la fonction.
-r séquence
Supprimer les affectations pour la séquence de touches.

La valeur de retour est nulle, sauf si une option invalide est fournie, ou si une erreur se produit.
break [n]
Sortir d'une boucle for, while, ou until. Si n est fourni, sortir de n niveaux de boucles. n doit être > 1. Si n est supérieur au nombre de boucles imbriquées, on sort de l'ensemble d'entre elles. La valeur de retour est nulle, sauf si le shell n'exécute pas de boucle lorsque le break est atteint.
builtin commande_interne [arguments]
Exécuter la commande interne du shell indiquée, en lui passant les arguments, puis renvoyer son code de retour. Ceci est utile lorsque l'on veut définir une fonction ayant le même nom qu'une commande interne, mais que l'on a besoin d'invoquer cette commande depuis l'intérieur de la fonction. On redéfinit souvent la commande interne cd ainsi. Le code de retour est faux si la commande_interne n'existe pas.
cd [rep]
Remplacer le répertoire de travail en cours par rép. La variable HOME est la valeur par défaut de rep. La variable CDPATH définit des chemins de recherche pour trouver le répertoire contenant rép. Les répertoires possibles y sont fournis dans une liste séparées par des doubles-points (:). Un nom de répertoire nul dans CDPATH est équivalent au répertoire en cours, c'est à dire ``.''. Si rép commence par un slash (/), alors CDPATH n'est pas utilisé. L'option -P demande de n'employer que l'enchaînement réel des répertoires sans suivre les liens symboliques (voir aussi l'option -P de la commande interne set plus bas). L'option -L force le suivi des liens symboliques. Un argument - est équivalent à $OLDPWD. La valeur de retour est vraie si l'on a pu changer le répertoire de travail, et fausse sinon.
command [-pVv] commande [arguments ...]
Lancer la commande avec les arguments indiqués, mais en simplifiant le processus habituel de recherche des commandes. Seules les commandes internes, et les commandes disque trouvées dans le PATH seront exécutées. Si l'option -p est fournie, la recherche de la commande utilisera une valeur par défaut du PATH garantissant de trouver tous les utilitaires standards. Si l'option -V ou l'option -v sont fournies, une description de la commande est affichée. L'option -v n'affiche qu'un simple mot indiquant la commande interne, ou le chemin d'accès utilisé pour invoquer la commande. L'option -V fournit une description plus volubile. Si les options -V ou -v sont fournies, le code de retour est 0 si la commande est trouvée, et 1 sinon. Si aucune option n'est fournie, et si une erreur se produit, ou si la commande est introuvable, le code de retour est 127. Sinon, le code de retour de cette commande interne est celui de la commande invoquée.
continue [n]
Reprendre l'exécution à l'itération suivante d'une boucle for, while, until, ou encore select. Si n est indiqué, reprendre 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'exécution reprend à la boucle la plus externe (`top-level'). La valeur de retour est 0 sauf si le shell n'exécutait pas de boucle quand il a rencontré l'instruction continue.
declare [-afFirx] [-p] [nom[=valeur]]
typeset [-afFirx] [-p] [nom[=valeur]]
Déclarer des variables et/ou leur fournir des attributs. Si aucun nom n'est mentionné, les valeurs des variables sont affichées. L'option -p affichera les attributs et les valeurs de chaque nom. Quand -p est utilisée, les autres options sont ignorées. L'option -F évite l'affichage des définitions de fonctions, seuls les noms des fonctions et leurs attributs sont affichés. L'option -F implique l'usage de -f . Les options suivantes permettent de restreindre l'affichage aux variables dotées de certains attributs, ou de fixer les attributs.
-a
Chaque nom est une variable de type tableau (voir le paragraphe Tableaux plus haut).
-f
Seulement les noms de fonctions
-i
La variable est traitée comme un entier. L'évaluation arithmétique (voir ÉVALUATION ARITHMÉTIQUE ) est effectuée lorsque la variable reçoit une valeur.
-r
Rend les noms accessibles en lecture seulement. On ne pourra plus modifier les valeurs de ces noms lors d'assignations ultérieures.
-x
Marquer le nom pour qu'il soit exporté dans l'environnement.

En utilisant `+' a la place de `-', l'attribut correspondant est désactivé. Dans une fonction, chacun des noms devient local, comme avec la commande local. La valeur de retour est 0 sauf si une option illégale est rencontrée, si on essaye de définir une fonction en utilisant "-f foo=bar", si on tente d'écrire dans une variable en lecture seule, si on essaye d'affecter une valeur a une variable tableau sans employer la syntaxe composée (voir Tableaux plus haut), si l'un des noms n'est pas un nom légal pour le shell, si on essaye de supprimer l'attribut lecture-seule d'une variable, si on essaye de supprimer l'attribut tableau d'une variable, ou si on essaye d'afficher avec -f une fonction inexistante.
dirs [-clpv] [+/-n]
Affiche la liste des répertoires actuellement mémorisés. L'affichage par défaut se fait sur une seule ligne, les noms de répertoires étant séparés par des espaces. On ajoute des répertoires dans cette liste avec la commande pushd, et on peut en supprimer avec la commande popd.
+ n
affiche le n-ième élément de la liste fournie par dirs sans options, en comptant à partir de la gauche en commençant à zéro.
- n
affiche le n-ième élément de la liste fournie par dirs sans options, en comptant à partir de la droite en commençant à zéro.
-c
Effacer la liste des répertoires en les supprimant tous.
-l
affiche une liste longue, le format par défaut utilisant le tilde pour représenter le répertoire personnel.
-p
Afficher la liste des répertoires avec un élément par ligne.
-v
Afficher la liste des répertoires avec un élément par ligne, en préfixant chaque entrée avec son numméro d'index dans la liste.

La valeur de retour est 0 sauf si une option illégale a été trouvée, ou si l'index n dépasse la longueur de la pile des répertoires.
disown [-ar] [-h] [job ...]
Sans options, chaque job est supprimé de la table des jobs actifs. Si l'option -h est fournie, chaque job n'est pas supprimé mais est marqué pour que le signal SIGHUP ne lui soit pas envoyé si le shell reçoit un signal SIGHUP. Si aucune job n'est indiqué, et si ni l'option -a ni l'option -r ne sont fournies, le job en cours est concerné. Si aucun job n'est indiqué, l'option -a signifie la suppression ou le marquage de tous les jobs ; l'option -r sans spécification de job restreint les opérations au job en cours. La valeur renvoyée est zéro sauf si un job indiqué n'est pas valide.
echo [-neE] [arguments ...]
Affiche ses argumentss, séparés par des espaces. La valeur de retour est toujours nulle. Avec l'option -n, le retour-chariot final est supprimé. Avec l'option -e l'interprétation des séquences d'échappement est activée. L'option -E désactive l'interprétation des séquences d'échappement, même sur les systèmes où elles sont interprétées par défaut. echo n'interprète pas la séquence -- comme une marque de fin des options. echo reconnaît les séquences d'échappement suivantes :
\a
alerte (avertisseur sonore)
\b
backspace
\c
suppression du retour-chariot final
\e
caractère d'échappement
\f
saut de page
\n
nouvelle ligne
\r
retour-chariot
\t
tabulation horizontale
\v
tabulation verticale
\\
backslash
\nnn
le caractère dont le code ASCII octal vaut nnn (un à trois chiffres)
\xnnn
le caractère dont le code ASCII hexadécimal vaut nnn (un à trois chiffres)
enable [-adnps] [-f fichier] [nom ...]
Active ou inhibe les commandes internes du shell. Ceci permet d'exécuter une commande disque ayant le même nom qu'une commande interne du shell, sans avoir besoin d'indiquer le chemin d'accès complet. Avec l'option -n, chaque nom indiqué est inhibé, sinon ils sont activés. Par exemple, pour utiliser le programme binaire test qui se trouve dans le PATH plutôt que la commande interne, utilisez enable -n test. L'option -f demande de charger la commande interne avec le nom indiqué depuis le fichier objet partagé sur les systèmes qui le permettent. L'option -d permet de supprimer une commande interne chargée précédemment avec -f. Si aucun nom n'est fourni, ou si l'option -p est indiquée, la liste des commandes internes du shell est affichée. Sans autre option, la liste des commandes actives est imprimée. Avec l'option -n, seules les commandes désactivées sont affichées. Si l'option -a est fournie, la liste de toutes les commandes est affichée, avec une indication des activations et inhibitions. Si on indique -s, la sortie est limitée aux commandes internes spéciales POSIX. La valeur de retour est 0, sauf si nom n'est pas une commande interne, ou s'il y a un problème avec le chargement d'une nouvelle commande.
eval [arguments ...]
Les arguments sont lus et regroupés en une seule commande simple. Cette commande est alors lue et exécutée par le shell, et son code de retour est renvoyée comme valeur de la commande eval. S'il n'y a pas d'arguments, ou uniquement des arguments nuls, eval renvoie vrai.
exec [-cl] [-a nom] [commande [arguments]]
Si une commande est indiquée, elle remplace le shell. Aucun nouveau processus n'est créé. Les arguments deviennent ceux de la commande. Si l'option -l est fournie, l'interpréteur place un tiret en guise de zéro-ième argument fourni a la commande. C'est ce que fait login. L'option -c permet d'exécuter la commande avec un environnement vide. Si l'option -a est indiquée, le shell transmet le nom comme zéro-ième argument. Si la commande Si la commande ne peut être exécutée, quelqu'en soit la raison, un shell non-interactif se termine, sauf si l'option shell execfail est active, auquel cas une erreur est renvoyée. Un shell interactif renvoie l'erreur si le fichier ne peut pas être exécuté. Si aucune commande n'est indiquée, les éventuelles redirections sont mises en place dans le shell en cours, et le code de retour est 0. S'il y a un problème de redirection, le code de retour est 1.
exit [n]
Termine le shell avec le code de retour n. Si n est omis, le code de retour sera celui de la dernière commande exécutée. Un éventuel gestionnaire installé sur EXIT sera exécuté avant la fin du shell.
export [-nf] [nom[=mot]] ...
export -p
Les noms indiqués sont marqués pour être exportés automatiquement dans l'environnement des commandes exécutées par la suite. Si l'option -f est fournie, les noms sont ceux de fonctions. Si aucun nom n'est mentionné, ou si l'option -p est fournie, une liste est affichée indiquant l'ensemble des noms exportables par ce shell. L'option -n supprime l'attribut d'exportation des variables mentionnées. export renvoie un code de retour nul, sauf si une option illégale est rencontrée, ou si l'un des noms n'est pas un nom de variable légal, ou si l'option -f est fournie avec un nom qui ne soit pas une fonction.
fc [-e éditeur] [-nlr] [premier] [dernier]
fc -s [motif=nouveau] [commande]
(Fix Command). Avec la première forme, un intervalle de commandes, entre la première et la dernière, est sélectionné dans la liste d'historique. La première et la dernière peuvent être indiquées sous forme de chaînes (la dernière commande commençant par la chaîne indiquée), ou sous forme numérique (un index dans la liste d'historique, ou un nombre négatif indiquant un décalage par rapport à la position actuelle dans cette liste). Si la dernière n'est pas indiquée, on considère qu'il s'agit de la commande en cours si l'on veut afficher la liste (ainsi fc -l -10 affiche les 10 dernières commandes), et qu'il s'agit de la même que la première sinon. Si la première n'est pas indiquée, on considère qu'il s'agit de la commande précédente pour une édition, et de la commande -16 pour l'affichage de liste.
L'option -n supprime l'affichage des numéros dans la liste. L'option -r inverse l'ordre des commandes Avec l'option -l les commandes sont affichées sur la sortie standard. Sinon, l'éditeur est invoqué avec un fichier contenant les commandes sélectionnées. Si aucun éditeur n'est précisé, on utilise la valeur de la variable FCEDIT, ou la valeur de EDITOR si FCEDIT n'existe pas. Si aucune variable n'existe, vi est invoqué. Lorsque l'édition se termine, les commandes sont affichées puis exécutées.
Dans la seconde forme, la commande est ré-exécutée après avoir remplacé chaque instance du motif par nouveau. Un alias utile pour ceci est ``r=fc -s'', ainsi en tapant ``r cc'' on relance la dernière commande commençant par ``cc'' et en tapant ``r'' ``r'' on ré-exécute la commande précédente.
Lorsque la première forme est utilisée, la valeur renvoyée est 0, sauf si une option illégale est trouvée, ou si première ou dernière indiquent des lignes d'historique inexistantes. Avec l'option -e, la valeur de retour est celle de la dernière commande exécutée, ou un échec si une erreur s'est produite avec le fichier temporaire des commandes. Avec la seconde forme, le code de retour est celui de la commande ré-exécutée, à moins que commande ne soit pas une ligne valide de l'historique, auquel cas fc renvoie un échec.
fg [job]
Placer le job en avant-plan, et en faire le job en cours. Si aucun job n'est mentionné, le shell considèrera qu'il faut ramener le job en cours en avant-plan. La valeur de retour est celle de la commande placée en avant-plan, ou un échec si le contrôle des jobs n'est pas actif, ou encore si le job n'existe pas ou a été lancé sans contrôle des jobs.
getopts chaîne_d_options nom [arguments]
getopts est utilise par les scripts shell pour analyser les paramètres positionnels. La chaîne_d_options contient l'ensemble des lettres d'options à reconnaître. Si une lettre est suivie par un deux-points (:), l'option est censée comprendre un argument, qui peut en être séparé par une espace. A chaque invocation, getopts place l'option suivante dans la variable shell dont le nom est fourni, en la créant si elle n'existe pas. Il place également l'index de l'argument suivant à analyser dans la variable OPTIND. OPTIND est initialisé à 1 à chaque lancement d'un shell ou d'un script. Quand une option nécessite un argument, getopts place celui-ci dans la variable OPTARG. Le shell ne réinitialise pas OPTIND automatiquement, il faut le faire manuellement si des appels multiples à getopts au sein du même shell utilisent des ensembles différents de paramètres.
Lorsque la fin des options est atteinte, getopts se termine avec un code de retour supérieur à zéro. OPTIND est rempli avec le rang du premier argument non-option, et nom contient '?'.
getopts analyse en principe les paramètres positionnels, mais si d'autres arguments lui sont transmis, getopts analysera ces derniers.
getopts peut renvoyer des erreurs de deux manières. Si le premier caractère de la chaîne_d_options est un deux-points, les erreurs sont renvoyées de manière silencieuse. Lors d'un fonctionnement normal, des messages de diagnostique sont affichés si une option est illégale, ou s'il manque un argument d'option. Si la variable OPTERR vaut 0, aucun message d'erreur ne sera affiché, même si le premier caractère de la chaîne_d_options n'est pas un deux-points.
Si une option illégale est rencontrée, getopts met 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, le caractère d'option est placé dans OPTARG et aucun message de diagnostique n'est affiché.
Lorsqu'un argument d'option est manquant, et si getopts n'est pas silencieux, un point d'interrogation (?) est placé dans la variable nom, OPTARG est détruit, et un message de diagnostique est affiché. Si getopts est silencieux, un deux-points (:) est placé dans la variable nom et OPTARG est rempli avec le caractère d'option trouvé.
getopts renvoie la valeur Vrai si une option, prévue ou imprévue, est trouvée. Il renvoie Faux si la fin des options est atteinte, ou si une erreur se produit.
hash [-r] [-p fichier] [nom]
Pour chaque nom fourni, le chemin d'accès complet de la commande est déterminé, en examinant les répertoires de $PATH et mémorisé. Si l'option -r est fournie, aucune recherche de chemin d'accès n'a lieu, et le fichier est utilisé comme chemin complet pour la commande. L'option -r force le shell à oublier tous les emplacements mémorisés. Sans arguments, hash affiche des informations sur les commandes mémorisées. La valeur de retour est Vrai, sauf si nom n'est pas trouvé, ou si une option est illégale.
help [motif]
Affiche des informations d'aide au sujet des commandes internes. Si un motif est indiqué, help fournit de l'aide sur toutes les commandes correspondant à ce motif, sinon, une liste des commandes internes est affichée. Le code de retour est 0, sauf si aucune commande ne peut correspondre au motif.
history [-c] [n]
history -anrw [fichier]
history -p arg [argument ...]
history -s arg [argument ...]
Sans options, affiche la liste des commandes de l'historique, avec des numéros de ligne. Les lignes marquées avec un astérisque * ont été modifiées. Un argument n permet de ne lister que les n dernières lignes. Si un argument est fourni, il est utilisé comme nom de fichier historique, sinon on utilise la valeur de la variable HISTFILE. Les options ont les significations suivantes :
-a
Ajouter les ``nouvelles'' lignes d'historiques (celles créées depuis le début de la session actuelle de bash) dans le fichier.
-n
Lire dans le fichier, et ajouter à la liste d'historique, les lignes non encore lues. Il s'agit des lignes qui ont été ajoutées dans le fichier depuis le début de la session actuelle de bash.
-r
Lire le contenu du fichier, et l'utiliser comme historique courant.
-w
Écrire dans le fichier l'historique actuel, en écrasant le contenu precedent.
-c
Effacer le fichier d'historique en détruisant toutes ses entrées.
-p
Effectuer la substitution sur les arguments suivants, et afficher le résultat sur la sortie standard. Ne pas mémoriser les résultats dans la liste d'historique. Chaque argument doit être protégé pour éviter le développement normal.
-s
Enregistrer les arguments dans la liste d'historique comme entrée unique. La dernière commande de la liste d'historique est supprimée avant que les arguments soient ajoutés.

La valeur de retour est 0, sauf si une option illégale est fournie, ou si une erreur se produit durant la lecture ou l'écriture du fichier.
jobs [-lnprs] [ job ... ]
jobs -x commande [ arguments ... ]
La première forme affiche la liste de jobs actifs. Les options ont les significations suivantes :
-l
Affiche les PIDs, en plus des informations normales.
-p
N'affiche que le PID du leader du groupe de processus du job.
-n
N'affiche que les jobs dont le statut a varié depuis le dernier affichage.
-r
N'affiche que les jobs en cours d'exécution (running). -s N'affiche que les jobs arrêtés (stopped).

Si une spécification de job est fournie, l'affichage ne comporte que les informations à propos de ce job. Le code de retour est 0, à moins qu'une option illégale soit transmise, ou que le job n'existe pas.
Si l'option -x est indiquée, jobs va remplacer toutes les spécifications de jobs rencontrées dans la commande ou dans ses arguments avec les Process Group ID correspondant, puis il exécutera la commande en lui transmettant les arguments, et en renvoyant son code de retour.
kill [-s sigspec | -n num-signal | -sigspec] [pid | job] ...
kill -l [sigspec | exit_status]
Envoyer le signal indiqué par sigspec ou num-signal aux processus spécifiés par pid ou par job. On peut fournir sigspec sous forme numérique, ou sous forme de nom de signal, comme SIGKILL. Si sigspec est un nom de signal, il n'y a pas de différenciation majuscules/minuscules, et le préfixe SIG est facultatif. S'il n'y a pas d'indication de sigspec, le signal envoyé est SIGTERM. Un argument -l fournit la liste des noms de signaux. S'il y a des arguments avec l'option -l, les noms des signaux indiqués sont affichés, et le code de retour est nul. L'argument exit_status de l'option -l est un nombre correspondant soit à un numéro de signal soit au code de retour renvoyé par un processus tué par un signal. kill renvoie Vrai si au moins un signal a été envoyé, ou Faux si une erreur s'est produite, ou si une option illégale a été trouvée.
let argument [argument ...]
Chaque argument est une expression arithmétique à évaluer (voir plus haut le paragraphe ÉVALUATIONARITHMÉTIQUE). Si l'évaluation du dernier argument donne 0, let renvoie 1, sinon elle renvoie 0.
local [nom[=valeur] ...]
Pour chaque argument, on crée une variable locale ayant le nom indiqué, et à laquelle on affecte la valeur fournie. Quand local est utilisée dans une fonction, le nom de la variable n'est visible que dans la fonction, et ses descendantes. Sans opérandes, local affiche la liste des variables locales sur la sortie standard. Il ne faut pas utiliser local en dehors des fonctions. La valeur de retour est 0, sauf si local est invoqué en dehors d'une fonction, ou si un nom illégal est fourni.
logout
Quitter un shell de login.
popd [-n] [+n] [-n]
Enlève des éléments de la pile des répertoires. Sans arguments, seul le répertoire du sommet de la pile est éliminé, et un cd est effectué en direction du nouveau répertoire au sommet. Les arguments éventuels ont la signification suivante
+n
supprime le n-ième élément de la liste affichée par dirs, en comptant depuis la gauche à partir de 0. Par exemple : ``popd +0'' enlève le premier répertoire, ``popd +1'' le second.
-n
supprime le n-ième élément de la liste affichée par dirs, en comptant depuis la droite à partir de 0. Par exemple: ``popd -0'' supprimer le dernier répertoire, et ``popd -1'' l'avant-dernier.
-n
Empêche le changement normal de répertoire lors de la suppression d'un répertoire de la pile. On ne fait que manipuler la pile.

Si la commande popd réussit, un dirs est effectué, et le code de retour est nul. popd renvoie Faux si une option illégale est trouvée, si la pile de répertoires est vide, si on a indiqué un répertoire absent de la pile, ou si le changement de répertoire a échoué.
printf format [arguments]
Ecrit sur la sortie standards les arguments fournis, sous contrôle du format. Ce format est une chaîne contenant trois types de caractères : normaux, qui sont simplement copiés sur la sortie standard, les caractères d'échappement qui sont convertis puis copiés sur la sortie standard, et les spécifications de format qui permettent d'afficher les argument. En plus des formats standards de printf(1), %b demande à printf de développer les séquences d'échappement se trouvant dans l'argument correspondant , et %q demande l'affichage dans un format réutilisable en entrée d'un script shell.
Le format est réutilisé jusqu'à consommer tous les arguments. Si le format demande plus d'arguments que fournis, les spécifications supplémentaires seront alimentées avec des valeurs nulles ou des chaînes vides.
pushd [-n] [rép]
pushd [-n] [+n] [-n]
Ajoute un répertoire au sommet de la pile des répertoires, ou effectue une rotation dans la pile, en ramenant le répertoire en cours au sommet. Sans argument, cette commande échange les deux répertoires au sommet, et renvoie 0, sauf si la pile est vide. Les arguments éventuels ont les significations suivantes :
+n
Effectue une rotation dans la pile, de manière à amener au sommet le n-ième répertoire de la liste affichée par dirs (en comptant à
 partir de la gauche).
-n
Effectue une rotation dans la pile, de manière à amener au sommet le n-ième répertoire de la liste affichée par dirs (en comptant à partir de la droite).
-n
Empêche le changement normal de répertoire lors d'un ajout dans la pile. Seule la pile est manipulée.
rép
Ajoute le répertoire rép au sommet de la pile, et en fait le nouveau répertoire de travail.

Si la commande pushd réussit, elle effectue un dirs. Si on utilise la première forme, pushd renvoie 0 sauf si le déplacement vers rep échoue. Avec la seconde forme, pushd renvoie 0 sauf si la pile est vide, si on a réclamé un élément inexistant de la pile, ou si le changement de répertoire a échoué.
pwd [-LP]
Affiche le chemin d'accès complet au 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 active. Si l'option -L est utilisée, les liens symboliques sont suivis. Le code de retour est nul, sauf si une erreur s'est produite durant la lecture du chemin d'accès au répertoire courant ou si une option invalide est transmise.
read [-er] [-a nom_a] [-p msg] [nom ...]
Une ligne est lue depuis l'entrée standard, puis le premier mot de cette ligne est affecté au premier nom, le second mot au second nom, et ainsi de suite. Les mots restants sont affectés au dernier nom. S'il y a moins de mots que de variables, celles restantes sont remplies avec des valeurs vides. Les caractères contenus dans la variables IFS sont utilisés comme délimiteurs de mots. Le caractère backslash (\) permet de supprimer toute signification spécial pour le caractère suivant, et autorise la continuation de lignes. Les options éventuelles ont les significations suivantes :
-r
Le basckslash n'est pas un caractère d'échappement. Il est considéré comme faisant partie de la ligne. En particulier la paire backslash/retour-chariot ne permet pas de faire une continuation de ligne.
-p
Afficher le message msg, sans retour-chariot final avant la lecture. Le message n'est affiché que si la lecture a lieu depuis un terminal.
-a
Les mots sont affectés aux rangs successifs d'une variable tableau de nom nom_a, en commençant à 0. nom_a est détruit avant d'affecter de nouvelles valeurs. Les autres nom sont ignorés.
-e
Si l'entrée standard provient d'un terminal, la bibliothèque readline (voir READLINE plus bas) est utilisée pour obtenir la ligne.

Si aucun nom n'est fourni, la ligne lue est affectée entièrement à la variable REPLY. Le code de retour est nul, sauf si une fin-de-fichier est rencontrée.
readonly [-afp] [nom ...] Les noms indiqués reçoivent un attribut lecture-seule. Les valeurs affectées à ces noms ne pourront plus être modifiées. Si l'option -f est fournie, on considère les fonctions correspondant à ces noms. L'option -a restreint l'action aux variables tableaux. Si aucun nom n'est fourni, ou si l'option -p est utilisée, on affiche la liste des noms en lecture-seule. L'option -p demande l'affichage dans un format susceptible d'être réutilisé en entrée. Le code de retour est nul, sauf si une option illégale a été trouvée, si l'un des noms n'est pas un nom légal de variables shell, ou si l'option -f est fournie avec un nom qui ne soit pas une fonction.
return [n]
La fonction shell en cours d'exécution se termine en renvoyant la valeur n. Si n est omis, la valeur renvoyée est celle de la dernière commande exécutée dans le corps de la fonction. Si cette commande est exécutée en dehors d'une fonction, mais durant l'exécution d'un script avec la commande . (source) ce script s'arrête, et la valeur renvoyée est n ou celle de la dernière commande exécutée. Si elle est utilisée en dehors d'une fonction ou d'un script exécuté par ., le code retour est Faux.
set [--abefhkmnptuvxBCHP] [-o option] [arg ...]
Sans options, le nom et la valeur de chacune des variables shell sont affichés dans un format susceptible d'être réutilisé en entrée. La sortie est triée en fonction de la localisation en cours. Lorsque des options sont fournies, elles activent ou inhibent des attributs du shell. Tous les arguments restant après traitement des options sont considérés comme des valeurs affectées dans l'ordre aux paramètres : $1, $2, ... $n. Les options éventuelles ont les significations suivantes :
-a
Marquage automatique des variables modifiées ou créées pour qu'elles soient exportées dans l'environnement des commandes exécutées ultérieurement.
-b
Affichage immédiat des statuts des jobs en arrière-plan qui se terminent, plutôt que d'attendre l'affichage du prochain symbole d'accueil. N'a d'utilité que si le contrôle des jobs est activés.
-e
Sortie immédiate lorsqu'une commande simple (voir GRAMMAIRE DU SHELL plus haut) se termine avec un code non nul. Le shell ne se termine pas si la commande échoue dans une boucle until ou while, dans un test if, dans une liste && ou ||, ou si le code de retour est inversé par !.
-f
Désactivation du développement des noms de fichiers.
-h
Mémorisation de l'emplacement des commandes lors de leur exécution. Activé par défaut.
-k
Tous les arguments du type affectation sont placés dans l'environnement des commandes, pas uniquement ceux saisis avant le nom de la commande.
-m
Mode supervision. Activation du contrôle des jobs. Ce mode est actif par défaut pour les shells interactifs qui le supportent (voir le paragraphe CONTRÔLE DES JOBS plus haut). Les processus en arrière-plan sont exécutés dans des groupes de processus séparés, et une ligne indiquant leur statuts est affichée lorsqu'ils se terminent.
-n
Lecture de commandes sans exécution. Ceci peut être utilisé pour rechercher les erreurs de syntaxe dans un script. Cette option est ignorée par les shells interactifs.
-o nom__d_option
Le nom_d_option est l'un des suivants :
allexport
Identique à -a.
braceexpand
Comme -B.
emacs
Utiliser une interface "à la emacs" pour les lignes de commande. C'est le comportement par défaut pour un shell interactif, sauf s'il est lance avec l'option -nolineediting.
errexit
Identique à -e.
hashall
Comme -h.
histexpand
Identique à -H.
history
activer l'historique des commandes, comme décrit plus haut au paragraphe HISTORY. Cette option est validée par défaut pour un shell interactif.
ignoreeof
Identique à l'exécution d'une commande shell `IGNOREEOF=10'. (voir le paragraphe Variables du Shell plus haut)
keyword
Comme -k.
monitor
Identique à -m.
noclobber
Identique à -C.
noexec
Identique à -n.
noglob
Identique à -f.
notify
Identique à -b.
nounset
Identique à -u.
onecmd
Identique à -t.
physical
Identique à -P.
posix
Modifier le comportement de bash lorsque les opérations par défaut s'éloigne de Posix 1003.2 afin d'être conforme au standard.
privileged
Identique à -p.
verbose
Identique à -v.
vi
Utiliser une interface d'édition des lignes de commande "à la vi".
xtrace
Identique à -x.

Si -o est invoqué sans nom_d_option, les valeurs actuelles des options sont affichées. Si +o est fourni sans nom_d_option, la série de commande set permettant de recréer la configuration courante est affichée sur la sortie standard.
-p
Basculer en mode privilégié. Dans ce mode, le fichier $ENV et $BASH_ENV ne sont pas traités, les fonctions shells ne sont pas héritées de l'environnement, et la variable SHELLOPTS, si elle est dans l'environnement, est ignorée. Si le shell démarre avec un UID (resp. 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 reprend la valeur de 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 force la réinitialisation des UID et GID effectifs à la valeur des UID et GID réels.
-t
Sortie automatique après lecture et exécution d'une commande.
-u
Considérer les variables inexistantes comme des erreurs durant l'expansion des paramètres. Si on tente de développer une variable inexistante, le shell affiche un message d'erreur, et, s'il n'est pas interactif, se termine avec un code de retour non-nul.
-v
Affichage des lignes de commandes au fur et à mesure de leur lecture.
-x
Après l'expansion de chaque commande simple, bash affiche la valeur de PS4, suivie par la commande et ses arguments développés.
-B
Le shell effectue l'expansion des accolades (voir plus haut) Cette opriont est active par défaut.
-C
Avec cette option, bash n'écrasera pas un fichier existant avec les opérateurs >, >&, et <>. Ce comportement peut être surchargé lors de la création d'un fichier de sortie en utilisant l'opérateur de redirection >| à la place de >.
-H
Autoriser le style ! de substitution historique. C'est le comportement par défaut lorsque le shell est interactif.
-P
Ne pas suivre les liens symboliques lors d'une commande comme cd qui modifie le répertoire de travail. Utiliser à la place le répertoire physique. Par défaut bash suit la chaîne logique des répertoires lors des commandes qui modifient le répertoire en cours.
--
Si aucun argument ne suit ce drapeau, alors les paramètres positionnels sont détruits. Sinon, les paramètres positionnels sont remplis avec les arguments, même si certains d'entre eux commencent par un -.
-
Fin des options. Tous les arguments restants sont affectés aux paramètres positionnels. Les attributs -x et -v sont désactivés. 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 - on désactive explicitement un drapeau. Les attributs peuvent également être fournis en argument lors de l'invocation du shell. Le jeu de drapeaux actuellement actifs est disponible dans $-. La valeur de retour est vraie sauf si une option invalide est rencontrée.
shift [n]
Les paramètres positionnels à partir de n+1 ... sont renommés en $1 .... Les paramètres représentés par les nombres $# jusqu'à $#-n+1 sont supprimés. n doit être un entier non-négatif inférieur ou égal à $#. Si n vaut 0, aucun paramètres 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 à 0 si n est supérieur à $# ou inférieur à 0. Sinon le code de retour est nul.
shopt [-pqsu] [-o] [nom_opt ...]
Bascule la valeur des variables contrôlant le comportement optionnel du shell. Sans option, ou avec l'option -p, une liste de toutes les options configurables est affichée, avec l'indication de l'état de chacune d'entre elles. L'option -p réclame un affichage susceptible d'être réutilisé en entrée. Les autres options ont les significations suivantes :
-s
Activer chaque nom_opt indiqué.
-u
Désactiver chaque nom_opt indiqué.
-q
Supprimer la sortie normale (mode silencieux). Le code de retour indique si l'option nom_opt est active ou non. Si plusieurs nom_opt sont fournis en argument de l'option -q, le code de retour est nul si tous les nom_opt sont actifs, et non-nul sinon.
-o
Restreindre les valeurs des nom_opts à celles définies pour l'option -o de la commande set interne.

Si l'option -s ou -u est utilisé sans argument nom_opt, l'affichage est limité aux options qui sont actives ou inactives, respectivement. sauf indication contraire, les options shopt sont désactivés par défaut.
Le code de retour lors d'un affichage est zéro si tous les nom_opt sont actifs, non-nul sinon. Lors d'une activation ou inhibition, le code de retour est nul sauf si nom_opt n'est pas une option valide du shell.
La liste des options shopt est :
cdable_vars
Si cette option est active, 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é.
cdspell
Les erreurs minimes de frappe dans un composant du répertoire en argument de la commande cd seront corrigées. Les erreurs corrigées sont les inversions d'un caractère, un caractère manquant et un caractère en trop. Si une correction est possible, le nom de répertoire corrigé est affiché, et la commande est exécuté. Cette option n'est utilisé que par les shells interactifs.
checkhash
bash vérifiera 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, la recherche normale de chemin est assurée.
checkwinsize
bash vérifiera la taille de la fenêtre après chaque commande et, au besoin, mettra à jour les valeurs des variables LINES et COLUMNS.
cmdhist
Lorsque cette option est active, bash essaiera de sauvegarder les commandes s'étendant sur plusieurs lignes en une seule entrée d'historique. Ceci facilite l'édition ultérieure de commandes multilignes.
dotglob
Si cette option est active, bash inclut les noms de fichiers commençant par un `.' dans les résultats des développements de noms de fichiers.
execfail
Un shell non-interactif ne se terminera pas s'il ne peut exécuter un fichier fourni en argument de la commande interne exec. Un shell interactif ne se termine pas si exec échoue.
expand_aliases
Les alias sont développés comme décrit plus haut, au paragraphe ALIASES. Cette option est activée par défaut pour les shells interactifs.
extglob
Les fonctionnalités étendues de mise en correspondance décrite au paragraphe Développement des noms de fichiers sont activées.
histappend
La liste d'historique est ajoutée au fichier dont le nom est contenu dans la variable HISTFILE lorsque le shell se termine, plutôt que d'écraser ce fichier.
histreedit
Si la bibliothèque readline est en service, un utilisateur peut ré-éditer une substitution d'historique qui a échoué.
histverify
Si la bibliothèque readline est en service, le résultat de la substitution d'historique n'est pas transmise immédiatement au shell. A la place, la ligne résultant est chargée dans le tampon d'édition de readline permettant des modifications ultérieures.
hostcomplete
Si la bibliothèque readline est en service, bash essayera d'assurer la complétion des noms d'hôtes lorsqu'un mot contient un @ (voir Completion au paragraphe READLINE plus haut). Cette option est active par défaut.
huponexit
bash enverra un signal SIGHUP à tous les jobs lorsqu'un shell de login interactif se termine.
interactive_comments
Un mot commençant par un # autorisera tous les autres caractères de la ligne à être ignorés dans un shell interactif (voir le paragraphe COMMENTAIRES plus haut). Cette option est active par défaut.
lithist
Si cette option, et l'option cmdhist sont actives, les commandes multilignes sont sauvées dans l'historique avec des sauts-de-ligne imbriqués plutôt que des points-virgules.
mailwarn
Si cette option est active et si un fichier que bash surveille pour les mails a été accédé depuis la dernière vérification, le message "The mail in fichier has been read" est affiché.
nocaseglob
Si cette option est active, bash traite les noms de fichiers sans différences minuscules/majuscules lors du développement des noms de fichiers (voir plus haut).
nullglob
Si cette option est active, bash autorise les motifs ne correspondant à aucun fichiers (voir Développement des noms de fichiers plus haut) à se développer en une chaîne nulle plutôt qu'en une valeur littérale.
promptvars
If set, prompt strings undergo variable and parameter expansion after being expanded as described in PROMPTING above. This option is enabled by default.
restricted_shell
Le shell active cette option s'il est démarré en mode restreint (voir SHELL RESTREINT plus bas). Cette valeur ne peut pas être changée. Elle n'est pas réinitialisée lorsque les fichiers de démarrage sont exécutés, ce qui permet à ces fichiers de découvrir si un shell est resteint ou non.
shift_verbose
La commande interne shift affiche un message d'erreur lorsque le nombre de décalage dépasse le nombre de paramètres positionnels.
sourcepath
La commande interne source (.) utilise la valeur de la variable PATH pour trouver le répertoire contenant le fichier fourni en argument. Cette option est active par défaut.
suspend [-f]
Suspend l'exécution du shell jusqu'à la réception d'un signal SIGCONT. L'option -f élimine le message d'erreur s'il s'agit d'un shell de login, et force sa suspension. Le code de retour est nul sauf si l'on utilise un shell de login et si l'option -f n'est pas fournie, ou si le contrôle des jobs n'est pas disponible.
test expr
[ expr ]
Renvoie la valeur 0 (vrai) ou 1 (faux) en fonction de 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 unités élémentaires décrites plus haut dans EXPRESSIONSCONDITIONNELLES
Les expressions peuvent être combinées avec les opérateurs suivant, par ordre de précédence décroissante :
! expr
Vrai si expr est fausse
( expr )
Renvoie la valeur de expr. Peut servir à surcharger la précédence normale des opérateurs.
expr1 -a expr2
Vrai si expr1 et expr2 sont toutes deux vraies.
expr1 -o expr2
Vrai si expr1 ou expr2 est vraie.

test et [ évaluent les expresssions conditionnelles en fonction d'un jeu de règles dépendant du nombre d'arguments.
0 argument
L'expression est fausse
1 argument
L'expression est vraie si et seulement si l'argument est non nul.
2 arguments
Si le premier argument est !, l'expression est vraie si et seulement si le second argument est nul. Si le premier argument est l'un des opérateurs conditionnel unaires décrits plus haut au paragraphe EXPRESSIONSCONDITIONNELLES l'expression est vraie si le test unaire est vrai. Si le premier argument n'est pas un opérateur conditionnel unaire; l'expression est fausse.
3 arguments
Si le second argument est l'un des opérateur conditionnels binaires décrits plus haut au paragraphe EXPRESSIONSCONDITIONNELLES, le résultat de l'expression est le résultat du test binaire utilisant le premier et le troisième argument en tant qu'opérandes.  
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 l'expression est fausse. Les opérateurs -a et -o sont considérés comme des opérateurs binaires dans ce cas.
4 arguments
Si le premier argument est !, le résultat est la négation de l'expression à trois arguments composée des arguments restants. Sinon l'expression est analysée et évaluée selon les règles de précédence décrites ci-dessus.
5 argument ou plus.
L'expression est analysée et évaluée selon les règles de précédence décrites ci-dessus.
times
Affiche les durées cumulées utilisateur et système pour le shell et les processus lancés par ce shell. Le code de retour est nul.
trap [-lp] [cmd] [sigspec]
La commande cmd sera lue et exécutée lorsque le shell recevra l'un des signaux sigspec. Si cmd est absent ou si elle vaut -, tous les signaux indiqués reprennent leurs comportements originaux (qu'ils avaient au démarrage du shell). Si cmd est une chaîne nulle, les signaux sigspec seront ignorés par le shell et par les commandes qu'il invoque. Si cmd est -p alors le comportement pour chacun des sigspec est affiché. Si aucun argument n'est fourni, ou si l'option -p est seule, trap affiche les commandes associées avec chaque signaux. Les signaux sigspec peuvent être spécifié en indiquant des noms de signaux définis dans <signal.h>, ou les numéros des signaux. Si sigspec vaut EXIT (0) la commande cmd sera exécutée au moment de quitter le shell. Si sigspec est DEBUG, la commande cmd sera exécutée après chaque commande simple (voir GRAMMAIRE DU SHELL plus haut). L'option -l affiche la liste des noms de signaux, et leurs numéros correspondants. Les signaux ignorés lors de l'invocation du shell ne peuvent pas être capturés ni reprendre leurs comportements par défaut. Lors de la création d'un processus fils, les signaux capturés reprennent leur comportement par défaut. Le code de retour est faux si un nom ou un numéro de signal est invalide, sinon trap renvoie une valeur vraie.
type [-atp] nom [nom ...]
sans option, indique comment chaque nom doit être interprété si on l'utilise en nom de commande. Si l'attribut -t est utilisé, type affiche une des phrases suivantes alias, keyword, function, builtin, ou file selon que le nom est un alias, un mot-clé réservé au shell, une fonction, une commande interne, ou un fichier sur le disque. Si le nom n'est pas trouvé, rien n'est affiché et le code de retour est faux. Si l'argument -p est utilisé, type renvoie le nom du fichier qui sera exécuté si l'on tape le nom en guise de commande, ou rien si type -t name ne renverrait pas file. Si une commande est disponible dans la table de hachage, -p affiche la valeur de cette table, qui n'est pas nécessairement le fichier apparaissant en premier dans le PATH. Si l'option -a est invoquée, type affiche tous les emplacements contenant un exécutable du nom indiqué. Ceci inclut les alias et les fonctions, sauf si l'option -p est également présente. La table de hachage des commandes n'est pas consultée avec l'option -a. type renvoie vrai si l'un des arguments est trouvé, et faux si aucun n'a été trouvé.
ulimit [-SHacdflmnpstuv [limite]]
fournit, sur les systèmes qui le permettent, un mécanisme de contrôle des ressources disponibles pour le shell et pour les processus qu'il lance. La valeur de la limite peut être un nombre (utilisant les unités particulières de la ressources), ou la valeur unlimited. Les options H et S précisent si la limite doit être dure (Hard), ou souple (Soft). Une limite dure ne peut pas être augmentée une fois qu'elle a été positionnée. Une limite souple peut être augmentée jusqu'à la hauteur de la limite dure correspondante. Par défaut, les limites fixées sont souples. Si la limite est omise, on affiche la valeur de la limite souple pour la ressource indiquée, sauf si l'option H est fournie. Quand plusieurs ressources sont indiquées, leurs noms, et leurs unités respectives sont affichés avant les valeurs. Les options sont interprétées ainsi :
-a
affichage de toutes les limites actuelles
-c
la taille maximale pour la création d'un fichier core
-d
la taille maximale du segment de données d'un processus
-f
la taille maximale d'un fichier créé par le shell
-l
la taille maximale que l'on peut verrouiller en mémoire
-m
la taille maximale de la partie résidente d'un processus
-n
le nombre maximal de descripteurs de fichiers ouverts (la plupart des systèmes ne permettent pas de modification)
-p
La taille d'un tuyau (pipe) en blocs de 512 octets (parfois non modifiable)
-s
la taille maximale de la pile
-t
la durée maximale, en seconde, de temps CPU accordé à un processus.
-u
le nombre maximal de processus autorisés pour un seul utilisateur
-v
la quantité de mémoire virtuelle disponible pour le shell

Si une limite est fournie, la ressource correspondante recevra cette limite (l'option -a ne permet que l'affichage). Si aucune option n'est indiquée, la ressource -f est prise par défaut. Les valeurs s'expriment en kilo-octets, sauf pour -t, ou elles s'expriment en secondes, -p, qui utilise des unités de blocs de 512 octets, ainsi que -n et -u, qui n'ont pas d'unités. La valeur renvoyée est 0 sauf si une option illégale est détectée, si un argument non-numérique autre que unlimited est fourni comme limite, ou si une erreur se produit durant la modification de la limite.
umask [-p] [-S] [mode]
Le masque de création de fichier de l'utilisateur est fixé au mode indiqué. 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 acceptes par chmod(1). Si mode est omis, ou si l'option -S est fournie, la valeur courante du masque est affichée. L'option -S affiche le masque sous forme symbolique, l'affichage par défaut étant en octal. Si l'option -p est fournie, et si le mode est omis, la sortie a lieu dans un format réutilisable en entrée. Le code de retour est nul si le mode a pu être changé correctement, ou si on a omis l'argument mode, et faux sinon.
unalias [-a] [nom ...]
Supprime le nom de la liste des alias définis. Si l'option -a est demandée, toutes les définitions d'alias sont supprimées. La valeur renvoyée est vraie sauf si un nom mentionné n'est pas un alias défini.
unset [-fv] [nom ...]
Pour chaque nom indiqué, supprimer la variable ou la fonction correspondante. Si aucune option n'est fournie, ou si l'option -v est demandée, chaque nom se réfère à une variable shell. Les variables en lecture-seule ne peuvent pas être détruites. Si l'option -f est indiquée, chaque nom se réfère à une fonction shell, et la définition de la fonction est supprimée. Chaque variable ou fonction est supprimé de l'environnement transmis aux commandes ultérieures. Si l'une des variables RANDOM, SECONDS, LINENO, HISTCMD, ou DIRSTACK est supprimée, elle perd ses propriétés spécifiques, même s'il elle est recréée ultérieurement. Le code de retour est vrai, à moins qu'un des noms n'existe pas, ou ne soit pas supprimable.
wait [n]
Attend que le processus indique se termine, et renvoie son code de retour. n peut indiquer un PID, ou un job. S'il s'agit d'un indicateur de job, on attendra la fin de tous les processus du tube de ce job. Si n est omis, on attend la fin de tous les processus fils actuellement actifs, et le code de retour sera zéro. Si n se rapporte à un processus ou un job inexistant, le code de retour sera 127. Dans tous les autres cas, le code de retour sera celui du dernier processus ou job attendu.

SHELL RESTREINT


Si bash démarre sous le nom rbash, ou si l'option -r est fournie lors de son invocation, le shell devient restreint. Un shell restreint permet de configurer un environnement plus contrôlé qu'un shell standard. Il se comporte de même manière que bash à la différence des actions suivantes qui sont désactivées ou non réalisées :
*
changer de répertoire avec cd ;
*
modifier ou détruire les valeurs de SHELL, PATH, ENV, ou BASH_ENV ;
*
indiquer des noms de commandes contenant un / ;
*
indiquer un nom de fichier contenant un / comme argument de la commande . interne ;
*
importer une définition de fonction dans l'environnement au démarrage ;
*
analyser les valeurs de SHELLOPTS au démarrage ;
*
rediriger la sortie en utilisant un opérateur >, >|, <>, >&, &>, et >> " ;"
*
utiliser la commande interne exec pour remplacer le shell par une autre commande " ;"
*
ajouter ou supprimer des commandes internes avec les options -f et -d de la commande enable interne ;
*
indiquer l'option -p de la commande command interne ;
*
supprimer le mode restreint avec set +r ou set +o restricted.

Ces restrictions sont mises en place après la lecture des fichiers de démarrage.
Lorsqu'ue commande trouvée dans un script shell est exécutée (voir le paragraphe EXECUTION DES COMMANDES plus haut), rbash supprime les restrictions dans le shell servant a exécuter le script.

VOIR AUSSI

Bash Features, Brian Fox et Chet Ramey
The Gnu Readline Library, Brian Fox et Chet Ramey
The Gnu History Library, Brian Fox et Chet Ramey
Portable Operating System Interface (POSIX) Part 2: Shell and Utilities, IEEE
sh(1), ksh(1), csh(1)
emacs(1), vi(1)
readline(3)

FICHIERS

/bin/bash2
L'exécutable bash.
/etc/profile
Le fichier d'initialisation globale, exécutée par les shells de login.
~/.bash_profile
Le fichier d'initialisation personnalisée, exécutée par les shells de login.
~/.bashrc
Le fichier de démarrage personnel, pour les shells interactifs.
~/.bash_logout
Le fichier de sortie des shells de login lors de la déconnexion.
~/.inputrc
Le fichier d'initialisation personnalisée de readline.

AUTEURS

Brian Fox, Free Software Foundation (auteur principal)
bfox@ai.MIT.Edu
Chet Ramey, Case Western Reserve University
chet@ins.CWRU.Edu

RAPPORT DE BOGUE

Si vous trouvez un bogue dans bash, vous êtes encouragés à nous en faire part. Tout d'abord vous devez vous assurer qu'il s'agit réellement d'un dysfonctionnement, et qu'il apparaît bien dans la dernière version de bash disponible.
Une fois que vous êtes sûrs qu'il s'agit bien d'un bogue, utilisez la commande bashbug pour nous envoyer un rapport. Si vous avez trouvé une correction, n'hésitez pas à l'envoyer en même temps. Les simples suggestions, ou les remarques d'ordre `philosophique' peuvent être transmises à bug-bash@prep.ai.MIT.Edu ou postées dans le groupe Usenet gnu.bash.bug.
TOUS les rapports de bogue doivent contenir :
Le numéro de version de bash
Le matériel et le système d'exploitation utilisés
La version du compilateur utilisé pour compiler bash.
Une description du comportement du bogue. [NDT : En anglais évidemment]
Un petit script, ou une manipulation qui met en évidence le bogue.

bashbug insère automatiquement les trois premiers éléments de cette liste dans le formulaire qu'il fournit pour remplir le rapport de bogue.
Les commentaires et rapports d'erreurs concernant la version originale de cette page de manuel doivent être transmis à chet@ins.CWRU.Edu. Ceux concernant la version française peuvent être envoyés à ccb@club-internet.fr.

BOGUES


Cet interpréteur est volumineux et lent.
Il y a 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 et les fonctions internes ne peuvent pas être arrétées/relancées.
Les séquences de commandes de la forme `a ; b ; c' ne sont pas gérées proprement lors d'une interruption de processus. En cas de suspension d'une telle séquence, l'interpréteur exécute immédiatement la commande suivante de la séquence. Il suffit de placer cette séquence entre parenthèses pour la forcer à créer un sous-shell, qui, lui, sera interruptible en bloc.
Les commandes à l'intérieur de $(...) ne sont pas analysées avant la réalisation de la complétion. Cela peut retarder l'affichage de messages d'erreurs pendant un certain temps après la frappe de la commande.
Les variables de type tableau ne peuvent pas (encore) être exportées.

TRADUCTION

Christophe Blaess 1997-2003.