Bonjour
Quelle est la différence entre ( cmd1 ; cmd2 ; ) et { cmd1 ; cmd2 ; } ?
Version imprimable
Bonjour
Quelle est la différence entre ( cmd1 ; cmd2 ; ) et { cmd1 ; cmd2 ; } ?
Bonjour,
Exemple de différence:
Code:
1
2
3
4
5
6
7
8
9
10
11 $ titi=tutu $ echo $titi tutu $ ( titi=toto ; echo $titi ;) toto $ echo $titi tutu $ { titi=toto ; echo $titi ;} toto $ echo $titi toto
Bonjour.
Quand tu utilises les parenthèses, tu ouvre un sous-shell. Il s'agit donc d'un nouveau contexte d'exécution avec sa propre mémoire (en dupliquant ce qui vient de la mémoire du processus père).
Les accolades définissent une simple suite de commandes/instructions.
Idriss
Je suis d'accord, mais difficile à montrer:
La raison pour laquelle je donne un exemple de différence...:)Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 $ echo "$( ps -l)" F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 0 O 1951 19038 1121 0 50 20 ? 226 pts/14 0:00 ps 0 S 1951 29953 29912 0 40 20 ? 244 ? pts/14 0:00 ksh 0 S 1951 1121 29953 0 50 20 ? 451 ? pts/14 0:01 bash $ { ps -l;} F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 0 S 1951 29953 29912 0 40 20 ? 244 ? pts/14 0:00 ksh 0 S 1951 1121 29953 0 50 20 ? 452 ? pts/14 0:01 bash 0 O 1951 19445 1121 0 60 20 ? 226 pts/14 0:00 ps $ ( ps -l;) F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 0 O 1951 20151 1121 0 50 20 ? 226 pts/14 0:00 ps 0 S 1951 29953 29912 0 40 20 ? 244 ? pts/14 0:00 ksh 0 S 1951 1121 29953 0 50 20 ? 452 ? pts/14 0:01 bash
Oui et c'était une bonne chose :ccool:
merci :-)
Une autre différence plus subtile est que les parenthèses sont des opérateurs alors que les accolades sont des mots réservés.
En conséquence, ll n'est pas nécessaire de séparer les parenthèses des autres éléments de la ligne de commande mais il est en revanche obligatoire de d'isoler l'accolade des commandes qui l'entourent car elle ne termine pas la commande courante.
Exemple: (cmd1;cmd2) est correct alors que {cmd1;cmd2} ne l'est pas, et doit être au moins { cmd1;cmd2; }