OVH Cloud OVH Cloud

[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

4 réponses

1 2
Avatar
Jean-Louis Liagre
Christophe Gaubert wrote:

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.


La commande "test" est une commande simple (non composée) et elle admet
une variante "[" qui a les caractéristiques d'une commande composée.

Comme il s'agit d'une seule et unique commande, il y a effectivement
ambiguité, mais suffisamment mineure pour justifier la création d'une
rubrique "commandes semi-composées" exprès pour elle ...


Avatar
Christophe Gaubert
La commande "test" est une commande simple (non composée) et elle admet
une variante "[" qui a les caractéristiques d'une commande composée.



Bien résumé. Ça doit être ça qui me turlupine. D'autant plus que
j'utilise exclusivement [, et jamais "test".

Enfin, nous n'allons pas épilogué :) En tout cas, je vois que le premier
chapitre du guide que je traduis est une sorte de résumé des pages info
et de manuel de bash. Comme je dispose de la version française du
manuel, je vais m'appuyer sur ça.

Merci à tous :)

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

Avatar
Nicolas George
Pascal Bourguignon wrote in message
:
<snip>

Je dirais qu'il y a une différence plus fondamentale encore : [, en tant que
commande interne, est appelée après toutes les étapes de développement de la
commande, alors que [[, en tant qu'instruction composée, peut intervenir
avant. Ça fait au moins deux différences importantes :

- Écrire [ "$x" = foo ... ] peut ne pas marcher si $x a une valeur
pathologique, commençant par - par exemple, parce que [ ne peut pas faire
la différence entre -X opérateur et -X résultat de l'expansion de $x. Au
contraire, [[ peut connaître la structure logique de son expression avant
le développement des arguments.

- [[ peut utiliser directement des constructions de glob pour ses tests. Par
exemple, avec zsh (je ne sais pas ce qu'il en est avec bash ou ksh), je
peux écrire [[ $x == foo* ]], qui va être vraie si $x commence par foo,
alors qu'avec [, la ligne serait devenue [ foobar = foo1 foo2 ] (à
supposer qu'on trouve les fichiers foo1 et foo2 dans le répertoire
courant), ce qui est de toutes façons une erreur.
Avatar
Xavier Gachon
Le 27-08-2005, Christophe Gaubert a écrit :
La commande "test" est une commande simple (non composée) et elle admet
une variante "[" qui a les caractéristiques d'une commande composée.


Bien résumé. Ça doit être ça qui me turlupine. D'autant plus que
j'utilise exclusivement [, et jamais "test".


pour appuyer ce resumé il est aussi interessant de rappeler que "["
n'as que les caracteristiques apparentes d'une commande composée,
a savoir que le "]" terminal n'est rien d'autre qu'un argument
ce qui en fait une simple command par opposition a une compound
command, exemple:

X="0 -eq 0 ]"
[ $X && echo ok # l'evaluation apres expansions est correcte.

X="0 -eq 0 ]]"
[[ $X && echo ok # erreur

mon centime, xavier.


1 2