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
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 ...
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 ...
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 ...
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
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
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
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.
Pascal Bourguignon wrote in message
<87y86ofet4.fsf@thalassa.informatimago.com>:
<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.
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.
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.
Le 27-08-2005, Christophe Gaubert <christophe-gaubert@wanadoo.fr> 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.
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.