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

Shell Affectation de Valeurs à des variables dynamiques

20 réponses
Avatar
franck.darras
Bonjour,

Je souhaiterai affecter des valeurs =E0 des variables dynmaques. Pour
eviter un long discours, voici le code

[code]
TEST=3DVAR1
echo $TEST

VALEUR=3DmaValeur
echo $VALEUR

$TEST=3D$VALEUR
r=E9sultat obtenu -bash: VAR1=3DmaValeur: command not found
[/code]

Merci pour votre aide.
Franck

10 réponses

1 2
Avatar
TiChou
Dans le message
<news:,
** tapota sur f.c.o.l.configuration :

Bonjour,


Bonsoir,

Je souhaiterai affecter des valeurs à des variables dynmaques.


Qu'entendez-vous par variable dynamique ? Par exemple un tableau indexé par
une variable ?

Pour eviter un long discours, voici le code

[code]
TEST=VAR1
echo $TEST

VALEUR=maValeur
echo $VALEUR

$TEST=$VALEUR


TEST=$VALEUR

résultat obtenu -bash: VAR1=maValeur: command not found
[/code]


Finalement un long discours aurait été préférable. Avec votre code je n'ai
pas saisi ce que vous cherchiez à faire.

Merci pour votre aide.


Notez que les questions de shell n'ont rien de spécifique à Linux et
qu'elles sont plutôt en charte sur le groupe fr.comp.os.unix.

--
TiChou

Avatar
news
wrote:
Bonjour,

Je souhaiterai affecter des valeurs à des variables dynmaques. Pour
eviter un long discours, voici le code

[code]
TEST=VAR1
echo $TEST

VALEUR=maValeur
echo $VALEUR

$TEST=$VALEUR
résultat obtenu -bash: VAR1=maValeur: command not found
[/code]

Merci pour votre aide.
Franck



avec des export, ca marche niquel...
sous bash.
sinon, man bash ou man le shell utilise

Avatar
Adrien Caillot
On 2005-11-24, wrote:
Bonjour,


Bonjour,

Je souhaiterai affecter des valeurs à des variables dynmaques. Pour
eviter un long discours, voici le code

[code]
TEST=VAR1
echo $TEST

VALEUR=maValeur
echo $VALEUR

$TEST=$VALEUR
résultat obtenu -bash: VAR1=maValeur: command not found
[/code]

Merci pour votre aide.
Franck



C'est ça que tu veux ?

omega#4:~$ TEST=VAR1
omega#4:~$ echo $TEST
VAR1
omega#4:~$ VALEUR=maValeur
omega#4:~$ echo $VALEUR
maValeur
omega#4:~$ eval $TEST=$VALEUR
omega#4:~$ echo $VAR1
maValeur
omega#4:~$

(Marche au moins avec Bash.)

--
Adrien

Avatar
Doug713705
Le Jeudi 24 Novembre 2005 19:05, s'est exprimé de la
sorte sur fr.comp.os.linux.configuration :

$TEST=$VALEUR


TEST=$VALEUR

devrait mieux fonctionner.

--
@+
Doug [Linux user #307925] - Slackware RuleZ ;-)
[Pourquoi t'es qui, qu'est ce que tu fais par où ?]
-- Pour me contacter enlever no-spam (2X) --

Avatar
lhabert
:

TEST=VAR1
echo $TEST

VALEUR=maValeur
echo $VALEUR

$TEST=$VALEUR


Note pour les incomprenors : le monsieur veut que son « $TEST=$VALEUR » ait
l'effet « VAR1=$VALEUR ».

Ça peut s'obtenir avec la command « eval », à laquelle tu passes une string
en argument en lui demandant de la parser et de l'exécuter. Soit :

eval "$TEST=$VALEUR"

. Sauf que ça va louzer dès que « $VALEUR » va contenir des caractères à la
noix. Tu peux limiter la casse avec

eval "$TEST='$VALEUR'"

, le seul cas où ça foire est quand « $VALEUR » contient des « ' ». Pour
s'en sortir, tu peux faire une horreur du style :

BLEUARGH=`sed "s/'/''/g"<<EOF
${VALEUR}a
EOF
`
eval "$TEST='${BLEUARGH%a}'"

(le coup de rajouter un « a » au bout, puis de l'enlever, c'est pour ne pas
perdre l'éventuel « n » final). Là, je crois que c'est à peu près fiable.

Avatar
Christophe PEREZ
Le Thu, 24 Nov 2005 23:02:53 +0000, Luc Habert a écrit:

le coup de rajouter un « a » au bout, puis de l'enlever, c'est pour ne pas
perdre l'éventuel « n » final). Là, je crois que c'est à peu près fiable.


Toi, t'es un pote à Stéphane C. non ? :-D

Comprenne qui pourra...

PS: Pour que mon humour ne soit pas mal pris, je précise que je trouve ta
réponse _très bien_.

--
Christophe PEREZ
Écrivez moi sans _faute !

Avatar
lhabert
Christophe PEREZ :

Toi, t'es un pote à Stéphane C. non ? :-D


C'est qui? En l'occurence, c'est de Lui Qui A Été Banni D'Usenet Pour Cinq
Ans que je la tiens, cette astuce.

Avatar
lhabert
Luc Habert :

BLEUARGH=`sed "s/'/''/g"<<EOF


Lire :

BLEUARGH=`sed "s/'/'''/g"<<EOF

, bien sur :-)

Avatar
TiChou
Dans le message <news:dm5gqt$1oa8$,
*Luc Habert* tapota sur f.c.o.l.configuration :

:
TEST=VAR1
echo $TEST

VALEUR=maValeur
echo $VALEUR

$TEST=$VALEUR


Note pour les incomprenors : le monsieur veut que son « $TEST=$VALEUR »
ait l'effet « VAR1=$VALEUR ».


Ouais, eh bien si c'est bien ce qu'il voulait, faut alors reconnaître que ça
manquait de clarté.

Mais admettons. :)

Ça peut s'obtenir avec la command « eval »,


Oui.

à laquelle tu passes une string en argument en lui demandant de la parser
et de l'exécuter. Soit :

eval "$TEST=$VALEUR"


Non. Plutôt :

eval $TEST='$VALEUR'

. Sauf que ça va louzer dès que « $VALEUR » va contenir des caractères à
la noix. Tu peux limiter la casse avec

eval "$TEST='$VALEUR'"

, le seul cas où ça foire est quand « $VALEUR » contient des « ' ». Pour
s'en sortir, tu peux faire une horreur du style :

BLEUARGH=`sed "s/'/''/g"<<EOF
${VALEUR}a
EOF
`
eval "$TEST='${BLEUARGH%a}'"


Ah oui, ça pour être une horreur, c'en est une. :)

Là, je crois que c'est à peu près fiable.


Même pas. Exemple :

$ VALEUR=$' SPACEnt TABn' SINGLE QUOTEn" DOUBLE QUOTEn` BACK QUOTE
nn LFnrn CRLFn'

Oui, je sais, elle est tirée par les cheveux et inutilement compliquée. :-P

$ TEST=VAR1

$ BLEUARGH=`sed "s/'/''/g"<<EOF
${VALEUR}a
EOF
`
$ eval "$TEST='${BLEUARGH%a}'"

$ [ "$VAR1" = "$VALEUR" ] && echo Ok || echo Ko
Ko

$ printf "$VAR1" | cat -A
SPACE$
^I TAB$
SINGLE QUOTE$
" DOUBLE QUOTE$
` BACK QUOTE$
$
LF$
^M$
CRLF$

Le single quote a disparu.

$ eval $TEST='$VALEUR'

$ [ "$VAR1" = "$VALEUR" ] && echo Ok || echo Ko
Ok

$ printf "$VAR1" | cat -A
SPACE$
^I TAB$
' SINGLE QUOTE$
" DOUBLE QUOTE$
` BACK QUOTE$
$
LF$
^M$
CRLF$

--
TiChou


Avatar
TiChou
Dans le message <news:dm5k5k$28qm$,
*Luc Habert* tapota sur f.c.o.l.configuration :

BLEUARGH=`sed "s/'/''/g"<<EOF


Lire :

BLEUARGH=`sed "s/'/'''/g"<<EOF


$ BLEUARGH=`sed "s/'/'''/g"<<EOF
${VALEUR}a
EOF
`
$ eval "$TEST='${BLEUARGH%a}'"
zsh: unmatched "

Ou en bash :
$ eval "$TEST='${BLEUARGH%a}'"
-bash: SINGLE: command not found
-bash: unexpected EOF while looking for matching ``'
-bash: syntax error: unexpected end of file

, bien sur :-)


Désolé. :)

--
TiChou


1 2