En lisant comment configurer grub
, je suis tombé sur un article affirmant que je devais utiliser l'une des deux syntaxes suivantes,
echo \(hd0,0\) >> /boot/grub/grub.conf
ou
echo '(hd0,0)' >> /boot/grub/grub.conf
car, sur la ligne de commande, les parenthèses sont interprétées d'une manière spéciale. Quelle est la particularité des parenthèses? Comment sont-ils interprétés?
Les parenthèses indiquent un sous-shell dans bash. Pour citer le man bash
page:
(list) list is executed in a subshell environment (see COMMAND
EXECUTION ENVIRONMENT below). Variable assignments and builtin
commands that affect the Shell's environment do not remain in
effect after the command completes. The return status is the
exit status of list.
où un list
est juste une séquence normale de commandes.
Ceci est en fait assez portable et n'est pas spécifique à seulement bash
. Spécification du langage de commande du shell POSIX a la description suivante pour le (compound-list)
syntaxe:
Exécuter liste-composée dans un environnement de sous-shell; voir Environnement d'exécution Shell . Les affectations de variables et les commandes intégrées qui affectent l'environnement ne doivent pas rester en vigueur une fois la liste terminée.
Une liste de commandes intégrée entre parenthèses s'exécute en tant que sous-shell.
Les variables dans un sous-shell ne sont pas visibles en dehors du bloc de code dans le sous-shell. Ils ne sont pas accessibles au processus parent, au shell qui a lancé le sous-shell. Ce sont en effet des variables locales.