Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[shell] test [[ (problème de traduction)

14 réponses
Avatar
Christophe Gaubert
Bonjour à tous,

je me suis lancé dans la traduction du Bash Guide for Beginners :
http://www.traduc.org/docs/guides/lecture/Bash-Beginners-Guide/html/
et je bute sur une phrase ayant trait à la construction [[ :

"Conditional expressions are used by the [[ compound command and by the
test and [ built-in commands."

Cette phrase sort directement des pages info de bash d'ailleurs.

Que dois-je entendre par "compound command" ? [[ n'est pas une commande
interne ?

Merci d'avance de votre aide.

Christophe

--
Christophe Gaubert
http://perso.wanadoo.fr/christophe.gaubert
Mail posté depuis un système libre GNU/Linux

10 réponses

1 2
Avatar
Eric Jacoboni
Christophe Gaubert writes:

Que dois-je entendre par "compound command" ? [[ n'est pas une commande
interne ?


compound command = commande composée.

Une commande composée est une commande qui sert à contrôler le flux
d'exécution des commandes et qui est formée d'un mot-clé de début et
d'un mot-clé de fin. Les boucles for/while/until et les
conditionnelles if/case, par exemple, sont des commandes composées.

Cela n'a rien à voir avec le fait qu'elle soit interne ou pas.

--
Éric Jacoboni, né il y a 1428533304 secondes

Avatar
Pascal Bourguignon
Christophe Gaubert writes:

Bonjour à tous,

je me suis lancé dans la traduction du Bash Guide for Beginners :
http://www.traduc.org/docs/guides/lecture/Bash-Beginners-Guide/html/
et je bute sur une phrase ayant trait à la construction [[ :

"Conditional expressions are used by the [[ compound command and by
the test and [ built-in commands."

Cette phrase sort directement des pages info de bash d'ailleurs.

Que dois-je entendre par "compound command" ? [[ n'est pas une
commande interne ?


man bash
Chercher "Compound command". Une définition par extension est donnée.

On peut traduire litéralement par commande composée.

--
"Our users will know fear and cower before our software! Ship it!
Ship it and let them flee like the dogs they are!"

Avatar
Christophe Gaubert
Une commande composée est une commande qui sert à contrôler le flux
d'exécution des commandes et qui est formée d'un mot-clé de début et
d'un mot-clé de fin. Les boucles for/while/until et les
conditionnelles if/case, par exemple, sont des commandes composées.

Cela n'a rien à voir avec le fait qu'elle soit interne ou pas.



D'accord, mais je ne saisis pas bien pourquoi il est donné un statut
différent à [[ et [ dans cette phrase. Pourquoi est-ce que [ n'est pas
considéré comme une commande composée ?

merci.

--
Christophe Gaubert
http://perso.wanadoo.fr/christophe.gaubert
Mail posté depuis un système libre GNU/Linux

Avatar
Christophe Gaubert
man bash
Chercher "Compound command". Une définition par extension est donnée.

On peut traduire litéralement par commande composée.



Oups. Je n'avais pas vu qu'il en était question dans le manuel. Ceci
dit, ça n'invalide pas la question que je me pose dans l'autre message.
Pourquoi [ n'est-il pas rangé dans les commandes composées ?


--
Christophe Gaubert
http://perso.wanadoo.fr/christophe.gaubert
Mail posté depuis un système libre GNU/Linux

Avatar
Eric Jacoboni
Christophe Gaubert writes:

D'accord, mais je ne saisis pas bien pourquoi il est donné un statut
différent à [[ et [ dans cette phrase.


Parce que [[ et [ n'ont pas le même statut (historiquement, en tous cas).

Pourquoi est-ce que [ n'est pas considéré comme une commande
composée ?


[ est simplement une autre façon de noter la commande test, alors que
[[ est une extension de celle-ci, introduite par ksh. Alors, après,
ces histoires de commandes composées ou non... J'imagine que test
n'étant pas considérée comme une commande composée, [ ne l'est pas non
plus.

--
Éric Jacoboni, né il y a 1428539560 secondes

Avatar
Eric Jacoboni
Christophe Gaubert writes:

D'accord, mais je ne saisis pas bien pourquoi il est donné un statut
différent à [[ et [ dans cette phrase.


Parce que [[ et [ n'ont pas le même statut (historiquement, en tous cas).

Pourquoi est-ce que [ n'est pas considéré comme une commande
composée ?


[ est simplement une autre façon de noter la commande test, alors que
[[ est une extension de celle-ci, introduite par ksh.

test et [ sont, au départ, des utilitaires externes au shell (cf
/bin/test et /bin/[ ). Pour des raisons d'efficacité, les shells les
ont intégrées comme commandes internes.

[[, elle, n'existe que comme commande interne du shell, tout comme
if/while et cie.


--
Éric Jacoboni, né il y a 1428539560 secondes

Avatar
Pascal Bourguignon
Christophe Gaubert writes:

man bash Chercher "Compound command". Une définition par extension
est donnée.
On peut traduire litéralement par commande composée.



Oups. Je n'avais pas vu qu'il en était question dans le manuel. Ceci
dit, ça n'invalide pas la question que je me pose dans l'autre
message. Pourquoi [ n'est-il pas rangé dans les commandes composées ?


Parce que [ n'est pas composé!


if commande ; then commande ; else commande ; fi

La commande if est composée de plusieurs autres commandes.


[ data op data ]

La commande [ n'est pas composée d'autre commandes.


On peut effectivement se poser la question pourquoi [[ est classée
dans les commandes composée alors qu'elle ne se compose d'aucune
sous-commande apparement. Je pense que la réponse est:

The && and || operators do not evaluate expression2 if the
value of expression1 is sufficient to determine the return
value of the entire conditional expression.

C'est à dire, que && et || dans [[ se comportent comme && et || dans
les listes (qui sont des commandes composées), et pas comme -a et -o
dans [. (Peut être partagent ils le même code?)


$ (echo un-1 >/dev/tty ; true) && (echo deux-2>/dev/tty ; false ) && (echo trois-3>/dev/tty)
un-1
deux-2
$ [[ $(echo un-1 >/dev/tty ; echo x) && $(echo deux-2>/dev/tty ; echo '') && $(echo trois-3>/dev/tty) ]]
un-1
deux-2
$ [ $(echo un-1 >/dev/tty ; echo x) -a $(echo deux-2>/dev/tty ; echo '') -a $(echo trois-3>/dev/tty) ]
un-1
deux-2
trois-3
$

--
__Pascal Bourguignon__ http://www.informatimago.com/
Small brave carnivores
Kill pine cones and mosquitoes
Fear vacuum cleaner


Avatar
Jean-Louis Liagre
La commande [ n'est pas composée d'autre commandes.


On peut effectivement se poser la question pourquoi [[ est classée
dans les commandes composée alors qu'elle ne se compose d'aucune
sous-commande apparement.



Si, la commande "[[" est bien composée car elle exige le délimiteur
de fin "]]", alors qu'avec la commande "test", le "]" est optionnel.

Plus exactement, il est obligatoire si le synonyme "[" est
utilisé, et parfois accepté quand "test" est utilisé.
Ca dépend des shells, bourne shell et ksh en veulent bien,
mais bash refuse ...

Avatar
Christophe Gaubert
Pourquoi [ n'est-il pas rangé dans les commandes composées ?


Pour résumer vos avis :
- différence dûe au comportement de &&, || et -a, -o
- différence de statut historique
- différence car [[ exige un délimiteur de fin

Bon, pourquoi pas... Mais je ne suis pas convaincu de la pertinence de
cette classification.

Merci de votre aide :)


--
Christophe Gaubert
http://perso.wanadoo.fr/christophe.gaubert
Mail posté depuis un système libre GNU/Linux

Avatar
Eric Jacoboni
Christophe Gaubert writes:

- différence dûe au comportement de &&, || et -a, -o
- différence de statut historique
- différence car [[ exige un délimiteur de fin


Il manque surtout le fait que [ est un synonyme de test, qui n'est pas
une commande mais, au départ, un utilitaire externe, alors que [[ est
une commande du shell (cf. posts précédents).

--
Éric Jacoboni, né il y a 1428581733 secondes

1 2