Salut !

Je travaille sur un petit projet en ce moment qui consiste à faire du "wrapping" de scripts shell.
Ce qui m'amène à travailler sur les codes retour de commandes.
Hors je me suis rendu compte d'un truc un peu étrange selon moi, une bête histoire de syntaxe.
Voici un petit script pour illustrer:

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
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/bin/bash
 
var=$(une_commande_qui_n_existe_pas 1>/dev/null 2>&1)
echo -e 'var=$(une_commande_qui_n_existe_pas 1>/dev/null 2>&1) donne ce code retour: '$?"\n"
 
function une_commande_qui_réussit { return 0; }
 
var=$(une_commande_qui_réussit 1>/dev/null 2>&1)
echo -e 'var=$(une_commande_qui_réussit 1>/dev/null 2>&1) donne ce code retour: '$?"\n"
 
echo -e "--> Tout le monde est d'accord ? :-)\n"
 
var=$(( 10 - 1 ))
echo -e 'var=$(( 10 - 1 )) donne ce code retour: '$?"\n"
 
var=$(( var = 10 - 1 ))
echo -e 'var=$(( var = 10 - 1 )) donne ce code retour: '$?"\n"
 
echo -e "--> Toujours d'accord ? :-)\n"
 
var=$(( 1 - 1 ))
echo -e 'var=$(( 1 - 1 )) donne ce code retour: '$?"\n"
 
echo -e "--> Normal !\n"
 
echo -e "OK, maintenant ça devient bizarre !\n"
 
(( var = 1 - 1 ))
echo -e '--> (( var = 1 - 1 )) donne ce code retour: '$?"\n"
Et voilà ce que ça donne:

var=$(une_commande_qui_n_existe_pas 1>/dev/null 2>&1) donne ce code retour: 127

var=$(une_commande_qui_réussit 1>/dev/null 2>&1) donne ce code retour: 0

--> Tout le monde est d'accord ? :-)

var=$(( 10 - 1 )) donne ce code retour: 0

var=$(( var = 10 - 1 )) donne ce code retour: 0

--> Toujours d'accord ? :-)

var=$(( 1 - 1 )) donne ce code retour: 0

--> Normal !

OK, maintenant ça devient bizarre !

--> (( var = 1 - 1 )) donne ce code retour: 1
En résumé:

var=$(( 1 - 1 )) donne ce code retour: 0

Mais...

(( var = 1 - 1 )) donne ce code retour: 1

Ça me laisse songeur.