Bonjour
Quelle est la différence entre ( cmd1 ; cmd2 ; ) et { cmd1 ; cmd2 ; } ?
Bonjour
Quelle est la différence entre ( cmd1 ; cmd2 ; ) et { cmd1 ; cmd2 ; } ?
Bonjour,
Exemple de différence:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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![]()
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; }
Partager