3 votes

Quelle est la bonne façon de regrouper les commandes en bash ?

Je voudrais regrouper quelques instructions bash après une condition :

Première tentative :

$ [[ 0 == 1 ]] && echo 1; echo 2
2

Deuxième tentative :

$ [[ 0 == 1 ]] && (echo 1; echo 2)
$ [[ 0 == 0 ]] && (echo 1; echo 2)
1
2

C'est donc cette dernière que je veux.

Question : C'est la première fois que j'utilise ( ... ) en bash. Est-ce que ( ... ) la bonne méthode, ou y a-t-il des effets secondaires que je pourrais manquer ?

4voto

campovski Points 1650

Placer les commandes dans () crée un sous-shell dans lequel les commandes groupées sont exécutées. Cela signifie que toute modification des variables effectuée dans le sous-shell, reste dans le sous-shell, par exemple

$ n=5; [[ "$n" == "5" ]] && ( ((n++)); echo $n); echo $n
6
5

Au lieu de cela, vous voulez regrouper avec {} qui n'invoque pas de sous-shell. La sortie serait alors

$ n=5; [[ "$n" == "5" ]] && { ((n++)); echo $n; }; echo $n
6
6

Faites également attention aux espaces à l'intérieur des {} et des points-virgules : { ((n++)); echo $n; }; .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X