Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/01/2012, 17h16   #1
Membre confirmé
 
Inscription : avril 2008
Messages : 188
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 188
Points : 222
Points : 222
Par défaut HP-UX: ksh: !: not found

Bon, la dernière fois, j'avais un souci avec le ksh d'AIX; maintenant, c'est avec celui de HP-UX :-(

Contrairement à linux, le ksh d'HP-UX semble ne pas reconnaître le bang ('!') devant une expression...

sous Linux:
Code :
1
2
3
4
5
6
$ true
$ echo $?
0
$ ! true  
$ echo $?
1
Jusque là, tout va bien...

Sous HP-UX:
Code :
1
2
3
4
5
6
7
% uname -a
HP-UX ppaleml B.11.11 U 9000/800 2323570091 unlimited-user license
$ true
$ echo $?
0
$ ! true  
ksh: !:  not found
Y a-t-il un autre moyen que de réécrire tous mes tests pour les passer sous UP-UX?

Par exemple, dois-je convertir (avec une bonne vieille macro emacs) mes tests:
Code :
if ! fgrep -q 'blabla' file ; then blabla ; fi
en
Code :
if fgrep -q 'blabla' file ; [[ $? -eq 0 ]] ; then blabla ; fi
En fait, en regardant la doc de plus près, il semblerait que le bang soit plutôt destiné à nier une expression-du-test, lorsque celle-ci est entre double crochets:
Code :
if [[ ! "x$a" = "x$b" ]] ; then ... fi
même si l'écriture suivante fonctionne aussi sous linux:
Code :
if ! [[ "x$a" = "x$b" ]] ; then ... fi
Quelle est votre expérience sur ce phénomène?

Merci d'avance

)jack(
jack-ft est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2012, 18h01   #2
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 538
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juillet 2006
Messages : 3 538
Points : 7 754
Points : 7 754
"!" n'est pas une fonction standard c'est donc normal de ne pas la trouver systématiquement sur tous les interpreteurs ksh.
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 03/01/2012, 23h39   #3
Expert Confirmé Sénior
 
Avatar de Sve@r
 
Homme Frédéric
Ingénieur développement logiciels
Inscription : février 2006
Messages : 3 055
Détails du profil
Informations personnelles :
Nom : Homme Frédéric
Âge : 44
Localisation : France, Oise (Picardie)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 3 055
Points : 4 934
Points : 4 934
Citation:
Envoyé par jack-ft Voir le message
Par exemple, dois-je convertir (avec une bonne vieille macro emacs) mes tests:
Code :
if ! fgrep -q 'blabla' file ; then blabla ; fi
en
Code :
if fgrep -q 'blabla' file ; [[ $? -eq 0 ]] ; then blabla ; fi
Salut

D'un point de vue lisibilité pure, mettre "if grep" alors que le if s'applique en réalité à l'évaluation $? -eq 0 est déroutant
Code :
fgrep -q 'blabla' file ; if [[ $? -eq 0 ]] ; then blabla ; fi
Code :
if fgrep -q 'blabla' file ; then true; else blabla ; fi
Citation:
Envoyé par jack-ft Voir le message
En fait, en regardant la doc de plus près, il semblerait que le bang soit plutôt destiné à nier une expression-du-test, lorsque celle-ci est entre double crochets:
Code :
if [[ ! "x$a" = "x$b" ]] ; then ... fi
même si l'écriture suivante fonctionne aussi sous linux:
Code :
if ! [[ "x$a" = "x$b" ]] ; then ... fi
Quelle est votre expérience sur ce phénomène?
Plutôt inutile de nier un test alors qu'il possède tous les outils pour inverser l'opérateur de comparaison
Et mettre "x" dans les deux expressions est inutile vu qu'elles sont entre guillemets
Code :
if [ "$a" != "$b" ] ; then ... fi
__________________
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit.
Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant.
Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation.
Dr. Adrian Rogers, 1931
Sve@r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 10h22   #4
Membre confirmé
 
Homme
Développeur informatique
Inscription : octobre 2006
Messages : 181
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : octobre 2006
Messages : 181
Points : 267
Points : 267
Personnellement j'aime bien la syntaxe suivante :
Code :
1
2
3
4
 ma commande
[[ $? != 0 ]]\
             && { instructions gestion erreur ;} \
             || { intructions pour succes mais plutot ecrites dans la suite du programme ;}
NB : a mon avis ce post devrait se trouver dans la section unix
Jean.Cri1 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 04/01/2012, 17h23   #5
Membre confirmé
 
Inscription : avril 2008
Messages : 188
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 188
Points : 222
Points : 222
Bonjour,

Citation:
Envoyé par Jean.Cri1 Voir le message
Personnellement j'aime bien la syntaxe suivante :
Code :
1
2
3
4
 ma commande
[[ $? != 0 ]]\
             && { instructions gestion erreur ;} \
             || { intructions pour succes mais plutot ecrites dans la suite du programme ;}
J'avoue que j'ai du mal à lire cette façon d'écrire. Avec un bon "if then elif else", je comprends tout de suite ce qui a été écrit (que ce soit par moi ou par un autre (ce qui est fréquemment le cas dans mon métier)).
Pour moi, j'ai plutôt tendance à réserver le '&&' et le '||' pour combiner des valeurs logiques et non comme structure de contrôle. C'est comme:
Code :
1
2
(and (test1) (action1))
(or (test2) (action2))
Je préfère nettement:
Code :
1
2
(when (test1) (action1))
(when (not (test2)) (action2))
C'est beaucoup plus facile à lire pour moi et j'attends du compilateur qu'il le traite avec la même efficacité!

Citation:
NB : a mon avis ce post devrait se trouver dans la section unix
Pour moi, il s'agit vraiment de spécificités et/ou de syntaxe du ksh, qui varie d'un OS (ou d'une implémentation) à l'autre, non?

)jack(
jack-ft est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 17h59   #6
Membre confirmé
 
Inscription : avril 2008
Messages : 188
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 188
Points : 222
Points : 222
Citation:
Envoyé par Sve@r Voir le message
Salut

D'un point de vue lisibilité pure, mettre "if grep" alors que le if s'applique en réalité à l'évaluation $? -eq 0 est déroutant
C'est amusant que ce soit déroutant pour toi, alors que, pour moi, c'est l'inverse!
Si j'ai une fonction dont la nature est d'être un prédicat, c'est-à-dire qu'elle fait un test (sans effet de bord) et retourne un booléen, je m'attends a priori à pouvoir l'utiliser dans la clause conditionnelle d'un "if".

Citation:

Code :
fgrep -q 'blabla' file ; if [[ $? -eq 0 ]] ; then blabla ; fi
Code :
if fgrep -q 'blabla' file ; then true; else blabla ; fi
Je trouve très étrange d'écrire une instruction de test, puis, de manière asynchrone et via une variable spéciale, de tester la valeur qui a été "retournée".
De plus, si on n'utilise pas les doubles crochets, on a un problème méta-circulaire, car
Code :
fgrep -q 'blabla' file ; if [ $? -eq 0 ] ; then blabla ; fi
est équivalent à:
Code :
fgrep -q 'blabla' file ; if test $? -eq 0 ; then blabla ; fi
lequel, si on suit la même logique, pourrait/devrait être écrit:
Code :
fgrep -q 'blabla' file ; test $? -eq 0 ; if [ $? -eq 0 ]; then blabla ; fi
c'est-à-dire:
Code :
fgrep -q 'blabla' file ; test $? -eq 0 ; test $? -eq 0 ; if [ $? -eq 0 ]; then blabla ; fi
si on veut s'arrêter un jour, il faut soit utiliser une spécificité du if (les doubles crochets), soit admettre que "if" peut tester le code de retour de la commande test (/usr/bin/test) et donc de n'importe quelle autre commande comme fgrep ou ls ou autre.

A priori, quand je programme, je m'attends à ce que la valeur de retour d'un prédicat soit dans la pile d'appel et non dans une variable spéciale!
De plus, cela oblige à savoir que 0 est la valeur vraie (ce qui est assez contraire à l'habitude prise en mathématiques!), alors que l'appel imbriqué permet justement de se passer de ça.
Peut-être est-ce une déformation due à plus de 25 ans de programmation fonctionnelle...

Citation:
Plutôt inutile de nier un test alors qu'il possède tous les outils pour inverser l'opérateur de comparaison
Ben justement non! Il n'y a pas tous les outils pour inverser un test puisqu'il manque précisément le "!"!!!
Par exemple, j'ai un bout de code qui fait (ou faisait):
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    if ! _REQ_findRequirementsFile ; then
        _REQ_logInfo "No requirements to check"
        return ${REQ_TRUE}
    elif ! _REQ_checkMetaRequirements ; then
        _REQ_logEnvironmentError "Unable to check the requirements"
        return ${REQ_FALSE}
    elif _REQ_checkRequirements ; then
        _REQ_logInfo "All requirements are met for ${REQ_NAME}."
        _REQ_logInfo - "${dash}"
        return ${REQ_TRUE}
    else
        logger_warn "REQ - Some requirements are unmet for ${REQ_NAME}."
        _REQ_logInfo - "${dash}"
        return ${REQ_FALSE}
    fi
Je fais une série de tests et retourne en fonction des résultats.
Personnellement, je n'ai pas de mal à (re)lire et comprendre ce bout de code.
Et ce n'est pas très commode de se passer du "!" dans ce genre de code car, du coup, il faut séparer les appels des prédicats du test de leur valeur de retour, ce qui fait que le code est de plus en plus indenté au fur et à mesure des tests. Beurk!
Bon, c'est vrai que, dans ce cas précis, compte-tenu du "return" dans chaque clause, on pourrait faire plusieurs "if" et fermer par un "fi" après chaque "return".

Citation:
Et mettre "x" dans les deux expressions est inutile vu qu'elles sont entre guillemets
Code :
if [ "$a" != "$b" ] ; then ... fi
J'ai cru pendant longtemps que les mettre entre guillemets suffisait (notamment pour le traitement des chaînes vides ou contenant des espaces), mais j'ai vu des cas où le test plantait à cause d'une variable contenant une chaîne commençant par un tiret et où le shell n'y retrouvait plus ses petits! Depuis, je me méfie (c'est qu'on nous demande de la robustesse!).

Cela dit, merci quand même pour tes réponses. Je vais réécrire mon code en me passant du bang!

)jack(
jack-ft est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2012, 23h29   #7
Expert Confirmé Sénior
 
Avatar de Sve@r
 
Homme Frédéric
Ingénieur développement logiciels
Inscription : février 2006
Messages : 3 055
Détails du profil
Informations personnelles :
Nom : Homme Frédéric
Âge : 44
Localisation : France, Oise (Picardie)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 3 055
Points : 4 934
Points : 4 934
Citation:
Envoyé par jack-ft Voir le message
De plus, si on n'utilise pas les doubles crochets, on a un problème méta-circulaire, car
Code :
fgrep -q 'blabla' file ; if [ $? -eq 0 ] ; then blabla ; fi
est équivalent à:
Code :
fgrep -q 'blabla' file ; if test $? -eq 0 ; then blabla ; fi
lequel, si on suit la même logique, pourrait/devrait être écrit:
Code :
fgrep -q 'blabla' file ; test $? -eq 0 ; if [ $? -eq 0 ]; then blabla ; fi
c'est-à-dire:
Code :
fgrep -q 'blabla' file ; test $? -eq 0 ; test $? -eq 0 ; if [ $? -eq 0 ]; then blabla ; fi


Citation:
Envoyé par jack-ft Voir le message
si on veut s'arrêter un jour, il faut soit utiliser une spécificité du if (les doubles crochets), soit admettre que "if" peut tester le code de retour de la commande test (/usr/bin/test) et donc de n'importe quelle autre commande comme fgrep ou ls ou autre.
Tout à fait. Mais en Bourne Shell (le tout premier) si une instruction if ls est possible, l'inverse if ! ls ne l'est pas.
D'où une écriture un peu plus carrée (oserais-je dire "scolaire" ?) qui est de 1) exécuter la commande 2) vérifier son code d'état ce qui permet d'inverser facilement le 2

Et on peut même renforcer la robustesse en capturant le code d'état ce qui permet d'insérer des echo de debug intermédiaire
Code bash :
1
2
3
4
5
6
7
8
ls ...; status=$?
echo "Résultat ls: $status"
if test $status -eq/-ne 0
then
    ...
else
    ...
fi

Citation:
Envoyé par jack-ft Voir le message
Ben justement non! Il n'y a pas tous les outils pour inverser un test puisqu'il manque précisément le "!"!!!
Par exemple, j'ai un bout de code qui fait (ou faisait):
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    if ! _REQ_findRequirementsFile ; then
        _REQ_logInfo "No requirements to check"
        return ${REQ_TRUE}
    elif ! _REQ_checkMetaRequirements ; then
        _REQ_logEnvironmentError "Unable to check the requirements"
        return ${REQ_FALSE}
    elif _REQ_checkRequirements ; then
        _REQ_logInfo "All requirements are met for ${REQ_NAME}."
        _REQ_logInfo - "${dash}"
        return ${REQ_TRUE}
    else
        logger_warn "REQ - Some requirements are unmet for ${REQ_NAME}."
        _REQ_logInfo - "${dash}"
        return ${REQ_FALSE}
    fi
Tu as donné un exemple très facile car bardé de return. Autrement dit, on peut même éviter tous les else (et réussir quand-même le travail sans passer par ! )
Code bash :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
_REQ_findRequirementsFile ; if test $? -ne 0 ; then
	_REQ_logInfo "No requirements to check"
	return ${REQ_TRUE}
fi
_REQ_checkMetaRequirements ; if test $? -ne 0; then
	_REQ_logEnvironmentError "Unable to check the requirements"
	return ${REQ_FALSE}
fi
_REQ_checkRequirements ; if test $? -ne 0 ; then
	_REQ_logInfo "All requirements are met for ${REQ_NAME}."
	_REQ_logInfo - "${dash}"
	return ${REQ_TRUE}
fi
logger_warn "REQ - Some requirements are unmet for ${REQ_NAME}."
_REQ_logInfo - "${dash}"
return ${REQ_FALSE}
Toutefois je parlais d'outil pour inverses les opérateurs de la commande spécifique "test" et non d'outil pour inverser une alternative basée sur d'autres commandes...
Exemple: test année bissextile puis test année non bissextile
Code bash :
1
2
3
y=`date '+%Y'`
test \( `expr $y % 4` –eq 0 –a `expr $y % 100` –ne 0 \) –o `expr $y % 400` -eq 0
test \( `expr $y % 4` –ne 0 –o `expr $y % 100` –eq 0 \) –a `expr $y % 400` -ne 0
Bien entendu il faut aussi être à l'aise avec les lois mathématiques de De Morgan...

Citation:
Envoyé par jack-ft Voir le message
mais j'ai vu des cas où le test plantait à cause d'une variable contenant une chaîne commençant par un tiret et où le shell n'y retrouvait plus ses petits
Je n'avais jamais songé à cette possibilité (à laquelle je n'ai jamais été confronté). Mais je viens de tester
Code bash :
1
2
3
4
a=-x
b=-y
test $a = $b || echo ok
test "$a" != "$b" && echo ok
et les deux tests ont fonctionné...
__________________
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit.
Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant.
Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation.
Dr. Adrian Rogers, 1931
Sve@r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 15h16   #8
Membre confirmé
 
Inscription : avril 2008
Messages : 188
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 188
Points : 222
Points : 222
Citation:
Envoyé par Sve@r Voir le message
Tout à fait. Mais en Bourne Shell (le tout premier) si une instruction if ls est possible, l'inverse if ! ls ne l'est pas.
C'est bien ce que je lui reproche!
Citation:
D'où une écriture un peu plus carrée (oserais-je dire "scolaire" ?) qui est de 1) exécuter la commande 2) vérifier son code d'état ce qui permet d'inverser facilement le 2
C'est effectivement la conséquence logique et qui permet d'avoir une écriture symétrique!

Citation:

Et on peut même renforcer la robustesse en capturant le code d'état ce qui permet d'insérer des echo de debug intermédiaire
Code bash :
1
2
3
4
5
6
7
8
ls ...; status=$?
echo "Résultat ls: $status"
if test $status -eq/-ne 0
then
    ...
else
    ...
fi
J'ai effectivement aussi été échaudé par le 'test $? -eq 0' où le $? "change" si on insère une instruction de debug, ce qui n'est pas possible avec l'écriture directe que je préfère. Du coup, systématiquement et comme tu le préconises, je stocke le code retour dans une variable, ce qui fait une variable de plus...

Tiens, au passage, avez-vous testé ceci:
Code :
1
2
3
4
typeset out=$(echo glop | fgrep glop); echo $?
0
typeset out=$(echo glop | fgrep pasglop); echo $?
0
:
Amusant, non?

Citation:
Tu as donné un exemple très facile car bardé de return.
Oui, oui, c'est bien ce que j'avais dit: "compte-tenu du "return" dans chaque clause...", mais ce n'est pas toujours le cas...

Citation:
Je n'avais jamais songé à cette possibilité (à laquelle je n'ai jamais été confronté). Mais je viens de tester
Code bash :
1
2
3
4
a=-x
b=-y
test $a = $b || echo ok
test "$a" != "$b" && echo ok
et les deux tests ont fonctionné...
Malheureusement, je ne me souviens plus du cas précis. Voici un exemple un peu capillotracté:
Code sh :
1
2
3
4
5
6
7
touch =
a=-f
b=
test $a = $b ; echo $?
0  # Oops!
test "$a" = "$b" ; echo $?
1  # Ouf!

)jack(
jack-ft est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2012, 15h24   #9
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Salut,

Citation:
Envoyé par jack-ft Voir le message
Tiens, au passage, avez-vous testé ceci:
Code :
1
2
3
4
typeset out=$(echo glop | fgrep glop); echo $?
0
typeset out=$(echo glop | fgrep pasglop); echo $?
0
:
Amusant, non?
Ben c'est le code retour de typeset qui est retourné, et non pas celui de "fgrep", donc par conséquent dans les deux cas, comme l'affectation de la variable a réussi, le test est vrai
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/01/2012, 21h51   #10
Expert Confirmé Sénior
 
Avatar de Sve@r
 
Homme Frédéric
Ingénieur développement logiciels
Inscription : février 2006
Messages : 3 055
Détails du profil
Informations personnelles :
Nom : Homme Frédéric
Âge : 44
Localisation : France, Oise (Picardie)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 3 055
Points : 4 934
Points : 4 934
Citation:
Envoyé par jack-ft Voir le message
C'est bien ce que je lui reproche!
Arf tu ne peux pas, en toute honnêteté, reprocher au shell de ne pas avoir en lui une évolution qui n'a été amenée que plus tard !!! Ca te manque certes (bien qu'on puisse toujours s'en passer) mais on ne peut pas le reprocher ; on ne peut que le regretter...

Citation:
Envoyé par jack-ft Voir le message
Malheureusement, je ne me souviens plus du cas précis. Voici un exemple un peu capillotracté:
Code sh :
1
2
3
4
5
6
7
touch =
a=-f
b=
test $a = $b ; echo $?
0  # Oops!
test "$a" = "$b" ; echo $?
1  # Ouf!
En fait je cherchais un exemple où l'utilisation de guillemets ne suffit pas à se prémunir contre les mauvaises interprétations (cf notre première discussion à propos du "x" devant les variables). Là pour l'instant le "x" n'est pas nécessaire...
__________________
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit.
Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant.
Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation.
Dr. Adrian Rogers, 1931
Sve@r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2012, 17h50   #11
Membre confirmé
 
Inscription : avril 2008
Messages : 188
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 188
Points : 222
Points : 222
Citation:
Envoyé par Sve@r Voir le message
Arf tu ne peux pas, en toute honnêteté, reprocher au shell de ne pas avoir en lui une évolution qui n'a été amenée que plus tard !!! Ca te manque certes (bien qu'on puisse toujours s'en passer) mais on ne peut pas le reprocher ; on ne peut que le regretter...
Tu as farpaitement raison! Je regrette simplement que les concepteurs d'origine n'y aient pas pensé (plus tôt)!
Citation:
En fait je cherchais un exemple où l'utilisation de guillemets ne suffit pas à se prémunir contre les mauvaises interprétations (cf notre première discussion à propos du "x" devant les variables). Là pour l'instant le "x" n'est pas nécessaire...
Exact aussi! Dans ce cas, le "x" (sans guillemets) marche aussi bien que les guillemets, mais n'est pas indispensable.

Je ne me souviens plus du tout, mais il est tout à fait possible que ce soit non pas un problème du shell lui-même, mais un problème de "test", c'est-à-dire qu'il ne se produise non pas avec "[[...]]" mais avec "[...]" ou "test ...", et uniquement pour certaines versions de "test" moins "intelligentes" que celle disponible sous linux.

)jack(
jack-ft est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h19.


 
 
 
 
Partenaires

Hébergement Web