Comment les parenthèses sont interprétées à la command line?

En lisant sur comment configurer grub , je suis tombé sur un article affirmant que j'ai besoin d'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 command line, les parenthèses sont interprétées d'une manière particulière. Quelle est la particularité des parenthèses? Comment sont-ils interprétés?

Les parenthèses désignent un sous-shell dans bash. Pour citer la page de manuel:

 (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ù une list est juste une séquence normale de commands.

C'est en fait assez portable et pas spécifique à bash cependant. La spécification POSIX Shell Command Language a la description suivante pour la syntaxe (compound-list) :

Exécuter la list composée dans un environnement sous-shell; voir Environnement d'exécution de Shell . Les affectations de variables et les commands embeddedes affectant l'environnement ne doivent pas restr en vigueur une fois la list terminée.

Une list de commands incorporée entre parenthèses s'exécute comme un sous-shell.

Les variables d'un sous-shell ne sont pas visibles en dehors du bloc de code dans le sous-shell. Ils ne sont pas accessibles au process parent, au shell qui a lancé le sous-shell. Ce sont en fait des variables locales.

Voir Linuxtopia – Chapitre 20. Sous-enveloppes