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

[shell] syntaxe

5 réponses
Avatar
Ph. Ivaldi
Bonjour,

En me documentant je tombe sur cette syntaxe:
: ${DIALOG=dialog}
(dans /usr/share/doc/dialog/examples/fselectchez moi)
Quelle avantage/différence par rapport à DIALOG=dialog ?
Merci,
--
Philippe Ivaldi.
http://www.piprime.fr/

5 réponses

Avatar
Benoit Izac
Bonjour,

le 10/10/2009 à 19:38, Ph. Ivaldi a écrit dans le message
:

En me documentant je tombe sur cette syntaxe:
: ${DIALOG=dialog}
(dans /usr/share/doc/dialog/examples/fselectchez moi)
Quelle avantage/différence par rapport à DIALOG=dialog ?



Je pense que tu voulais écrire ${DIALOG:=dialog}, l'explication est là :
<http://www.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_06_02>

En clair ${DIALOG:=dialog} assigne « dialog » seulement si $DIALOG
existe et n'est pas vide.

# $A n'existe pas
% unset A
% echo $A

% echo ${A:=b}
b
% echo $A
b
# $A est vide
% A % echo $A

% echo ${A:=b}
b
% echo $A
b
# $A a déjà une valeur
% A=a
% echo ${A:=b}
a
% echo $A
a

--
Benoit Izac
Avatar
Benoit Izac
Bonjour,

le 10/10/2009 à 19:38, Ph. Ivaldi a écrit dans le message
:

En me documentant je tombe sur cette syntaxe:
: ${DIALOG=dialog}
(dans /usr/share/doc/dialog/examples/fselectchez moi)
Quelle avantage/différence par rapport à DIALOG=dialog ?



Je pense que tu voulais écrire ${DIALOG:=dialog}, l'explication est là :
<http://www.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_06_02>

En clair, ${DIALOG:=dialog} assigne « dialog » seulement si $DIALOG
n'existe pas ou est vide.

# $A n'existe pas
% unset A
% echo $A

% echo ${A:=b}
b
% echo $A
b
# $A est vide
% A % echo $A

% echo ${A:=b}
b
% echo $A
b
# $A a déjà une valeur
% A=a
% echo ${A:=b}
a
% echo $A
a

--
Benoit Izac
Avatar
Ph. Ivaldi
Le 10 octobre 2009, Benoit Izac écrivit :

Je pense que tu voulais écrire ${DIALOG:=dialog}



Non non, je veux bien dire
: ${DIALOG=dialog}

J'ai trouvé cette notation sur mon disque dur:
/usr/share/doc/dialog/examples/fselect

Après quelques recherches, on peut lire dans la page man de colon (que
je n'ai pas) http://pwet.fr/man/linux/commandes/posix/colon
: ${X«c}

Il y a pas mal d'explications dans ce fil
http://unix.derkeiler.com/Newsgroups/comp.unix.shell/2005-04/0108.html
mais j'avoue ne toujours pas avoir compris la différence entre
: ${DIALOG=dialog} et DIALOG=dialog

sauf que:
$ sh -x -c ": ${DIALOG=dialog}"
+ : dialog

$ sh -x -c "DIALOG=dialog"
+ DIALOG=dialog

Je me dis qu'il doit bien y avoir une raison profonde pour des gens
compétents utilisent cette notation...
--
Philippe Ivaldi.
http://www.piprime.fr/
Avatar
Benoit Izac
Bonjour,

le 10/10/2009 à 22:39, Ph. Ivaldi a écrit dans le message
:

Je pense que tu voulais écrire ${DIALOG:=dialog}



Non non, je veux bien dire
: ${DIALOG=dialog}



Ok, donc le lien que j'ai mentionné t'est toujours utile. Ça assigne
« dialog » dans DIALOG seulement si DIALOG n'existe pas. Les « : » sont
juste la pour que l'évaluation ne produise pas de message d'erreur :

# unset X
# ${X«c}
sh: abc: not found
# echo $X
abc


# unset X ; : ${X«c} ; echo $X
abc
# X= ; : ${X«c} ; echo $X

# XÞf ; : ${X«c} ; echo $X
def

--
Benoit Izac
Avatar
Ph. Ivaldi
Le 10 octobre 2009, Benoit Izac écrivit :

Ok, donc le lien que j'ai mentionné t'est toujours utile.



Oui, très utile !

Ça assigne
« dialog » dans DIALOG seulement si DIALOG n'existe pas. Les « : » sont
juste la pour que l'évaluation ne produise pas de message d'erreur :
[...]



C'est clair maintenant, merci.
--
Philippe Ivaldi.
http://www.piprime.fr/